2013-02-22 85 views
3

是否可以在將參數傳遞給基構造函數之前處理參數?在調用基構造函數之前處理參數

如:

A --> B 

其中A是一個抽象類,B是子類。

A的構造函數,像這樣:

Protected A (MyObject myObject) 

B的構造函數,像這樣:

Public B (string objectName) 

我希望它是這樣的

Public B (String objectName) : base (MyObject myObject) 
{ 
myObject = new MyObject (objectName); 
} 

回答

3

如果你想做一些不平凡的事情(它不適合一個表達式,你可以內聯到base調用中),那麼唯一的方法是在static方法中,例如:

public B (string objectName) : base (SomethingComplex(objectName)) 
{ 
    //... 
} 
static MyObject SomethingComplex(string objectName) 
{ 
    // this can now be arbitrarily complex 
    if(string.IsNullOrWhiteSpace(objectName)) 
     throw new ArgumentException("objectName") 
    // etc 
    return new MyObject(objectName); 
} 
1

是的,但只是作爲單個表達式:

public B(String objectName) : base(new MyObject(objectName)) { 
} 

請注意,由於此操作在類構造之前運行,因此無法訪問實例成員。

如果您想要運行多個表達式(例如,參數驗證),您可以調用靜態方法。

相關問題