this statement after contructor's arguments
本问题已经有最佳答案,请猛点这里访问。
我在尝试用APN构建东西时看到了这个代码块。有人能给我解释一下"这个"陈述是什么意思吗?
1 2 | public ApplePushService(IPushChannelFactory pushChannelFactory, ApplePushChannelSettings channelSettings) : this(pushChannelFactory, channelSettings, default(IPushServiceSettings)) |
它像那些参数的默认值吗?
当然-这将一个构造函数链接到另一个。有两种形式-
如果不指定任何内容,它会自动链接到基类中的无参数构造函数。所以:
1 2 3 4 | public Foo(int x) { // Presumably use x here } |
等于
1 2 3 4 | public Foo(int x) : base() { // Presumably use x here } |
请注意,实例变量初始值设定项是在调用其他构造函数之前执行的。
令人惊讶的是,C编译器没有检测到您是否以相互递归结束-因此,此代码是有效的,但最终将以堆栈溢出结束:
1 2 3 4 5 6 7 8 9 10 | public class Broken { public Broken() : this("Whoops") { } public Broken(string error) : this() { } } |
(但是,它确实阻止您链接到完全相同的构造函数签名。)
有关更多详细信息,请参阅我关于构造函数链接的文章。
例如
1 2 3 4 5 6 7 8 | // Set a default value for arg2 without having to call that constructor public class A(int arg1) : this(arg1, 1) { } public class A(int arg1, int arg2) { } |
这允许您调用一个可以调用另一个构造函数的构造函数。
在这种情况下,调用另一个构造函数,
例如:
1 2 3 | public ClassName() : this("abc") { } public ClassName(string name) { } |
编辑:
Is it like default values of those arguments ?
它是一个重载,您可以在一个地方委托它的完整逻辑,并使用默认值从其他构造函数调用。
这些上下文中可以使用
- 调用其他构造函数。
- 将当前对象作为参数传递。
- 请参阅实例方法或字段。