2016-03-21 92 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(来。然后删除单参数构造函数的主体,因为所有工作都在两个参数构造函数中完成。

相关问题