2017-02-19 2 views
0

はのは、このコードスニペットを見てみましょう:メンバーは所有者クラスであってもプロパティによってのみアクセスできますか?

class A { 
    int m_x; 
    public int x { 
     get { return m_x; } 
     set { ... } 
    } 
} 

m_xはプライベートですので、クラスAにアクセス可能だが、他のクラスは唯一の公共xプロパティを介してアクセスすることができます。

私は、毎回xが変更されたときに呼び出されるメソッドを持っています。 (それはset { ... }にあります)

私の問題は、クラスAにあります。m_xの値を直接変更することができます。

  • 「と呼ばれなければならない」メソッドが呼び出されていないこの方法です。

現在、このエラーの唯一の兆候は、接頭辞m_です。

コンパイル時のチェックを行う方法はありますか?

+0

しかし、プライベートフィールドの場合は、あなたのコントロールできる*あなたの*コードによってのみ変更することができますか? –

+0

はい、しかし人間の誤差要因があります。私の疲れた瞬間の1つで、xの代わりにm_xを書くと、何時間もバグの原因を探す必要があります。 – Tudvari

答えて

1

コンパイル時のチェック方法はありますか?

いいえ、クラスAは、それがメソッドを呼び出すためにプライベートフィールドが設定されるたびに持っていることを知ることになっています。これは、クラスが実際に実装する内部ロジックの一部です。

コンパイラは、メソッドを最初に呼び出さずにプライベートフィールドを設定することを止めることはできません。これはコンパイラではなくクラスの開発者の責任になります。

関連する問題