0

以下の例のように、レガシーな .Net 1.1 スタイルのコードが多数使用されていますが、自動プロパティを使用して縮小したいと考えています。これにより、多くのクラスが 30 ~ 40% 縮小されます。これは良いことだと思います。

public int MyIntThingy
{
    get
    {
        return _myIntThingy;
    }

    set
    {
        _myIntThingy = value;
    }
} private int _myIntThingy = -1;

これは次のようになります。

public int MyIntThingy
{
    get;
    set;
}

唯一の問題は、どこに設定すればよいかということMyIntThingy = -1;です。

クラスを最初から書いていれば、より良いアイデアが得られたでしょうが、そうではありませんでした。明白な答えは次のとおりです。コンストラクターに入れます。問題は、このクラスには多くのコンストラクターがあることです。デバッガーでの初期化を-1見ると、コンストラクターが呼び出される前に発生することがわかります (私は信じています)。ここで説明されているように、静的コンストラクターを使用する必要があるかのよう です 。Java の静的イニシャライザが思い浮かびますが、やはり、私の変数は静的ではありません。http://www.glenmccl.com/tip_003.htm

このクラスに機能的な変更ではなくスタイル上の変更を加えたいと考えています。くだらないものですが、数年間テストされ、機能しています。機能を壊すのは悪いことです。だから...私は、より短く、より甘く、よりキュートでありながら同等のコードを探しています。ご不明な点がございましたら、お知らせください。

4

2 に答える 2

1

文体的で中断のない変更が必要な場合は、形式を少し変更することを検討してください。

public int MyIntThingy
{
    get { return _myIntThingy; }
    set { _myIntThingy = value; }
} 
private int _myIntThingy = -1;    

きれいじゃないですか?

また、将来のコードにのみ自動プロパティを使用することを検討してください。デフォルト値がない場合を除いて、既存のコードでそれらを使用するのはリスクが高すぎるように思われます。

于 2010-05-25T22:33:58.427 に答える
1

恐れ入りますが、選択肢はありません。

タイプのデフォルト値とは異なる初期値を持つ自動プロパティを使用する場合は、コンストラクターで初期値を設定する必要があります。

于 2010-05-25T22:34:59.283 に答える