Set*_*den 2 c# syntax null constructor class-constructors
有人可以解释下面的语法糖吗?
protected MyConstructor() : this(null)
Run Code Online (Sandbox Code Playgroud)
主要是我对这部分感兴趣:" : this(null)"
我知道受保护的,构造函数和"this"关键字是如何工作的,但我很困惑,无法在我的所有在线搜索中找到最后一部分的所有详细信息.
编辑:我应该补充一点,它是在一个公共抽象类中.所以我猜构造函数正在调用实现者构造函数.
谢谢
这是构造函数的特殊语法.您可以有两个基本变体:
protected MyConstructor() : this(null)
Run Code Online (Sandbox Code Playgroud)
使用null参数调用构造函数的不同重载.
protected MyConstructor() : base(null)
Run Code Online (Sandbox Code Playgroud)
使用null参数在基类上调用构造函数.
所以,你可以有这样一个类:
class MyClass
{
object someObject;
public MyClass() : this(null) {}
public MyClass(object someObject) { this.someObject = someObject; }
}
Run Code Online (Sandbox Code Playgroud)
现在你可以像这样实例化这个类:
var c = new MyClass(); // c.someObject is null
var c2 = new MyClass(new object()); // c2.someObject is some new object instance
Run Code Online (Sandbox Code Playgroud)
这是必需的,因为您不能以任何其他方式重用构造函数代码.如果您只是覆盖或重载方法,则等效项将如下所示:
public void DoStuff()
{
DoStuff(null);
}
public void DoStuff(object someObject)
{
// Do some stuff
}
Run Code Online (Sandbox Code Playgroud)
它调用另一个具有参数的类构造函数:
protected MyConstructor() : this(null) { } // This calls the other constructor
protected MyConstructor(object whatever)
{
Frob(whatever);
}
Run Code Online (Sandbox Code Playgroud)
在同一个对象上还有另一个构造函数,它接受某种可空对象。例如:
public MyConstructor(string str)
{
// A
}
public MyConstructor() : this(null)
{
// B
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中(public为了演示目的将构造函数更改为),如果我调用:
var newObj = new MyConstructor();
Run Code Online (Sandbox Code Playgroud)
它将创建一个MyConstructor对象,首先运行代码A(null作为参数传入),然后运行代码B。
这是一种允许您合并需要运行的公共代码的方法,而不管调用什么构造函数。
| 归档时间: |
|
| 查看次数: |
478 次 |
| 最近记录: |