[英]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.