2016-03-21 90 views
0

我能找到的最接近的線索是this one,但情況有所不同 - 要調用的基礎構造函數是默認構造函數。這裏我需要指定我想要傳遞的參數。我可以在構造函數中調用this和base重載嗎?

假設我們有以下情形:

public class Base 
    { 
     public string Str; 

     public Base(string s) 
     { 
      Str = s; 
     } 
    } 

    public class A : Base 
    { 
     public string Str2; 

     public A(string str2) 
      : base(str2) 
     { 
      Str2 = str2; 
     } 

     public A(string str2, string str) 
      : base(str) 
     { 
      Str2 = str2; 
     } 
    } 

我想避免在A的第2個構造函數重載重複相同的邏輯(技術上我可以換全部的邏輯爲功能降低了複製粘貼/提高可維護性,因爲最後所有的重載都會依賴於相同的代碼。如果沒有其他解決方案,會遵循這一點)。

我想我可以調用第一個A的第一個構造函數重載,然後調用基本的一個。但似乎我不能。

這裏有什麼方法?

回答

2

正確的做法是

public class A : Base 
{ 
    public string Str2; 

    public A(string str2) 
     : this(str2, str2) 
    { 
    } 

    public A(string str2, string str) 
     : base(str) 
    { 
     Str2 = str2; 
    } 
} 

A單參數構造函數調用的A 2個參數的構造函數傳入同一個字符串使用this(這兩個參數,而不是base(來。然後刪除單參數構造函數的主體,因爲所有工作都在兩個參數構造函數中完成。

相關問題