コンストラクタ内で、thisで、自分への参照が取得できる

親子関係を持つオブジェクトを作りたくて、親子を同時に生成して、さらに子に親の参照を持たせたいと思いました。
親のクラスのコンストラクタ内で、自分への参照が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)したのに、オブジェクトは生成されていて、一応使えている・・・。
調べてませんが、デストラクタが動かないとか、問題があると思いますが。

投稿日:
カテゴリー: C#

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です