如何调用this和base构造函数

时间:2017-01-03 01:24:03

标签: c# constructor

如何调用this和base构造函数?可以打电话吗?

我想做的代码就是这个

public class ObservableTestCollection<T> : ObservableCollection<T>
{
    public T Parent;   
    public ObservableTestCollection(T parent)
    {
        Parent = parent;
    }
    public ObservableTestCollection(T parent, IEnumerable<T> source): base(source) ,this(parent)
    {

    }
}

2 个答案:

答案 0 :(得分:4)

  

如何调用this和base构造函数?可以打电话吗?

你不能像你的例子那样调用this和base构造函数。

要实现您在示例中尝试做的事情,您将不得不像这样重构它。

public class ObservableTestCollection<T> : ObservableCollection<T> {
    public T Parent;   

    //This constructor calls the instance constructor
    public ObservableTestCollection(T parent) : this(parent, Enumerable.Empty<T>()) {

    }

    //Instance constructor is calling the base constructor
    public ObservableTestCollection(T parent, IEnumerable<T> source) : base(source) {
        Parent = parent;
    }
}

第二个构造函数用于填充局部变量并调用基础构造函数。让我们将构造函数称为实例构造函数。现在可以使用this关键字由其他构造函数调用实例构造函数。

<强> Using Constructors (C# Programming Guide)

  

构造函数可以通过调用同一对象中的另一个构造函数   使用关键字。与 base 一样,可以使用或不使用   参数和构造函数中的任何参数都可用   参数,或作为表达式的一部分。

答案 1 :(得分:0)

语言不允许这样做。您需要从构造函数中提取公共代码到方法,并从两个构造函数中调用它。这样你的代码就不会被怀疑了。