親子関係を持つオブジェクトを作りたくて、親子を同時に生成して、さらに子に親の参照を持たせたいと思いました。
親のクラスのコンストラクタ内で、自分への参照がthisで取得できるので、この課題は解決したのですが、
ふと、コンストラクタ内でthisで、自分への参照を取得するのって、問題ないのか?との疑問が生まれました。
まあ、通常の使用で問題があるとは思いませんが、以下の様な邪悪なコードが書けるみたいです。
[TestMethod()]
public void ConstractFailTest()
{
try
{
var p = new ConstractFailItem("taro");
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
}
System.Diagnostics.Debug.WriteLine(ConstractFailItem.MyItem.Name);
}
public class ConstractFailItem
{
public static ConstractFailItem MyItem { get; set; }
public string Name { get; }
public ConstractFailItem(string name)
{
MyItem = this;
Name = name;
throw new Exception("強制エラー");
}
}
コンストラクタで失敗(Exception)したのに、オブジェクトは生成されていて、一応使えている・・・。
調べてませんが、デストラクタが動かないとか、問題があると思いますが。