我可以从另一个构造函数调用构造函数(作为常规方法)吗?

时间:2011-09-18 23:58:37

标签: c#

假设我有2个构造函数。

public class MyClass
{
   public MyClass()
   {
     int id = 0;
     //Same behaviour
   }
   Public MyClass(int id)
   {
     //Same behaviour
   }
}

两种结构都实现相同的行为。唯一的区别是,如果调用第一个构造函数并且id = 0;

的值

我的问题是要知道我是否可以调用第二个构造函数,而不是实现相同的行为?如果可能的话,我会这样做吗?

5 个答案:

答案 0 :(得分:5)

你可以这样做:

public class MyClass {
    public MyClass() : this(0) {
    }
    public MyClass(int id) {
    }
}

这里是Microsoft's documentation。 (你必须向下滚动一下;尝试搜索: this

答案 1 :(得分:3)

public class MyClass
{
   public MyClass() : this(0)
   {
   }
   public MyClass(int id)
   {
     //Same behaviour
   }
}

答案 2 :(得分:2)

是的,这称为构造函数链接。它是这样实现的:

public class MyClass {
    public MyClass() : this(0) { }
    public MyClass(int id) {
        this.id = id;
    }
}

请注意,您可以链接到基类构造函数,如下所示:

public class MyClass : MyBaseClass {
    public MyClass() : this(0) { }
    public MyClass(int id) : base(id) { }
}

public class MyBaseClass {
    public MyBaseClass(int id) {
        this.id = id;
    }
}

如果存在基类且未指定要链接到的构造函数,则默认为可访问的无参数构造函数(如果有)。如果没有指定要链接到的构造函数,并且没有可访问的无参数构造函数,则会出现编译时错误。

答案 3 :(得分:1)

如果这是C#4,另一种方法是使用构造函数参数的默认值(有效地使其可选):

public MyClass(int id = 0) { ...

我认为这是您举例的理想解决方案。

但这取决于你是否想将这个类用作带有构造函数约束的类型参数的类型参数...

答案 4 :(得分:0)

为什么不在私有函数中放置相同的行为?