2008年9月19日金曜日

[.NET]プロパティ変数の直接参照(DeepCopy的な処理)

強引なやり方としてはリフレクションがありますが、通常privateフィールドは、該当のクラスからしかアクセスできません。ということから、同一クラスでも別インスタンスからはアクセスできないと信じきっていました。しかし、コピーコンストラクタを書いていると、そんなことはないってことがわかりました。
たとえば、とあるフィールドを変更するとフラグが立つといった処理系ではこういったやり方もあるというのに今日気づきました。いやー頭が固くなってますねぇ。コード例はこんなかんじ

public class DataClass
{
    private bool udate = false;
    /// <summary>
    /// 更新フラグ
    /// </summary>
    public bool IsUpdate
    {
        get { return udate; }
    }

    private int intData = 0;
    /// <summary>
    /// 数値のプロパティ
    /// </summary>
    public int IntData
    {
        get { return intData; }
        set { intData = valueudate = true; }
    }

    private String strData = String.Empty;
    /// <summary>
    /// 文字列のプロパティ
    /// </summary>
    public String StrData
    {
        get { return strData; }
        set { strData = valueudate = true; }
    }

    /// <summary>
    /// コンストラクタ
    /// </summary>
    public DataClass()
    {
    }

    /// <summary>
    /// コピーコンストラクタ
    /// </summary>
    /// <param name="src">コピー元</param>
    public DataClass(DataClass src)
    {
        intData = src.intData;
        strData = src.strData;
        udate = src.udate;
    }
}

0 件のコメント :