[英]Using this() in C# Constructors
我一直在试图弄清楚这些构造函数之间是否存在任何差异。 假设有一个不接受 arguments 的 Foo() 构造函数,所有这些构造函数都会有相同的结果吗?
public Foo()
: this()
{
blah;
blah;
blah;
}
public Foo()
{
this();
blah;
blah;
blah;
}
public Foo()
{
this = new Foo();
blah;
blah;
blah;
}
我会避免在结构中分配给this
。 正如您从其他答案中看到的那样,它的可能性很少为人所知(我只知道它出现在规范中的一些奇怪情况)。 在你得到它的地方,它没有任何好处 - 在其他地方它可能会改变结构,这不是一个好主意。 结构应该始终是不可变的:)
编辑:只是为了让人们 go “meep!” 一点点 - 分配给this
与链接到另一个构造函数并不完全相同,因为您也可以在方法中这样做:
using System;
public struct Foo
{
// Readonly, so must be immutable, right?
public readonly string x;
public Foo(string x)
{
this.x = x;
}
public void EvilEvilEvil()
{
this = new Foo();
}
}
public class Test
{
static void Main()
{
Foo foo = new Foo("Test");
Console.WriteLine(foo.x); // Prints "Test"
foo.EvilEvilEvil();
Console.WriteLine(foo.x); // Prints nothing
}
}
示例 2 和 3 是不合法的 C#。
编辑:乔恩准确地指出当Foo
是一个struct
时 3 是合法的。 Go 查看他的回答!
不,他们不会,因为只有第一个构造函数实际上是合法的。 另外两个由于各种原因是非法的。
编辑有趣的是,当 Foo 是一个结构时,3 确实是合法的。 但即使在那种情况下,这也是一项多余的任务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.