3

私は、次のことと、それを行うための最良の方法との違いは何であるか疑問に思いました。

public class ClassA
{
    public ClassB myClass = new ClassB();

    public void MethodA()
    {
         myClass.SomeMethod();
    }
}

またはこれ:

public class ClassA
{
    public ClassB myClass = null;

    public ClassA()
    {
        myClass = new ClassB();
    }        

    public void MethodA()
    {
         myClass.SomeMethod();
    }
}

編集

IDisposableを削除しました。これは単なる例であり、インスタンス変数のインスタンス化にどちらの方法が優れているかを確認することがポイントでした。

4

3 に答える 3

4

ない。

IDisposable廃棄する実際のリソースがない限り、実装しないでください。
フィールドを単にnullinに設定するだけでDispose()は、ほとんどの場合役に立ちません。

質問に答えるのは問題ではありません。
短くて単純な最初のバージョンを使用する必要があります。

于 2012-04-11T17:39:31.920 に答える
1

ClassB使い捨てですか?その場合は、に設定するのではなく、破棄する必要がありますnullClassA他に使い捨て可能なリソースはありますか? もしそうなら、それらは処分されるべきです。処分するものがない場合は、実装する必要はありませんIDisposable

破棄をClassA実装しているからといって、そのコンテキストで何でも破棄できるわけではありません。物事もそれを実装する必要があります。さらに、実際に実装してIDisposableいる場合は、そうするために認識されているパターンがあります。

于 2012-04-11T17:41:31.910 に答える
1

最初の例のコードは、コンパイラによって 2 番目の例のコードに変換されます。インスタンス変数が定義されている場所で初期化すると、実際にはその初期化がコンストラクターの先頭に移動します (またはコンストラクターの直前の他のメソッドで、事実上同じことです)。

最初のケースを実行できない場合があります (割り当てているものが複雑すぎるか、まだ存在しないデータに依存しているなど)。しかし、それ以外は個人的な好みです。ただし、一般的には、同じクラスで 2 つの手法を混在させることは避けたほうがよいでしょう。読者にとって理解が少し難しくなるためです。

于 2012-04-11T18:07:48.420 に答える