1

私は常にゲッターセッターパターンを使用している人々を心配しています:

    public int MyVariable { get; private set; }

    public void SomeFunction(){
        MyVariable = 10;
    }

私が理解している限り、これは次のようなものにコンパイルされます。

    private int myVariable;

    public int GetMyVariable(){
        return myVariable;
    }

    private void SetMyVariable(int value){
        myVariable = value;
    }

    public void SomeFunction()
    {
        SetMyVariable(10);
    }

頻繁に使用すると、プログラムのパフォーマンスに影響しませんか?そのようにする方が良いのではないでしょうか:

    private int myVariable;
    public int MyVariable { get {return myVariable; } }

    public void SomeFunction(){
        myVariable = 10;
    }
4

3 に答える 3

5

まず、このタイプの最適化は一般的に非生産的です。単一のメソッド呼び出しを最適化しようとしても、実際の測定されたパフォーマンスには通常何の影響もありません。使用する言語機能をマイクロ最適化するのではなく、使用するアルゴリズムをより高いレベルで最適化することに努力を集中する方がよいでしょう。

頻繁に使用すると、プログラムのパフォーマンスに影響しませんか? 次のようにしたほうがよいのではないでしょうか。

いいえ。これは、一度コンパイルされると事実上同じになります。

さらに、リリース ビルドでは、JIT コンパイラは通常、get メソッドと set メソッドを完全に最適化し、完全にインライン化します。これにより、パブリック フィールドを使用する場合とまったく同じように効果的に実行され、メンバーへの直接アクセスと同じパフォーマンスが得られます。

于 2013-01-22T00:54:32.480 に答える
3

コンパイルしても同じです。

証拠として、このリンクをチェックしてください。以下はその抜粋です。

リスト 10-5 の get アクセサーと set アクセサーに実装がないことに注意してください。自動実装プロパティでは、C# コンパイラが背後でバッキング ストア フィールドを作成し、従来のプロパティに存在するのと同じロジックを提供しますが、従来のプロパティのすべての構文を使用する必要がなくなります。

于 2013-01-22T00:43:32.987 に答える