7

一般的に静的メソッドを使用する頻度はどれくらいですか?私が好きなら:

Class1 _class34 = new Class1(parameter);

Class1.DoSomething(_class34, parameter1, parameter2, parameter3, parameter4).

また

_class34.DoSomething(parameter1, parameter2, parameter3, parameter).

最初の例のように、クラスの静的メソッドを呼び出してクラスのオブジェクトを渡す傾向がありますか?

これら2つの例に関するベストプラクティスは何ですか?注意すべきパフォーマンス、デザイン、一般的な慣行はありますか?どちらを一般的に使用する必要があり、毎日のコーディングシナリオでどちらを選択しますか。最初の例は読みやすいようです(すべてのパラメーターを渡して何かを実行します)。2番目の例では、オブジェクトで作業していることを2回読み取る必要がありますか?

それは本当に大したことではなく、ただ疑問に思っています。

4

7 に答える 7

11

一般的に、静的メソッドは、実行したいことがクラスの1つのインスタンスから独立している場合にのみ使用する必要があります。特定のインスタンスの状態に直接アクセスしたり影響を与えたりする必要がある場合は、通常、非静的メソッドが最適です。

于 2012-04-08T12:37:38.983 に答える
2

「もっと頻繁に」答えはありません。
それはすべて使用法の種類に依存します。

要点は次のとおりです。指定されたクラスのオブジェクトが影響を受ける/使用される場合は、常に非静的メソッドを使用する必要があります。ただし、影響を受ける/使用されるクラスのインスタンスが1つもない場合は、常に静的メソッドを使用する必要があります。

あなたの例Class1.DoSomething(_class34, parameter1, parameter2, parameter3, parameter4)では、オブジェクト指向プログラミングが提供するすべての可能性(ポリモーフィズムなど)を取り除くため、これは適切なアプローチではありません。

静的関数が必要になるシナリオの良い例は、String.Parseなどのファクトリメソッドです。これは、Stringの特定のインスタンスなしで開始されますが、文字列クラスに接続されています。

于 2012-04-08T12:42:41.950 に答える
2

これはランタイムがすでに行っていることであり、すべてのインスタンスメソッドにはこれを渡す非表示の最初の引数があります。拡張メソッドの構文で公開されています。

ランタイムの作業を明示的に行うことは特に有用ではなく、構文がより冗長になります。そして、あなたが思い付く必要のある種類の名前を考えると、苦痛です。_class34の代わりに_thisを検討してください:)

于 2012-04-08T12:44:45.083 に答える
0

静的メンバーは単体テストを複雑にする可能性があるため、それらの使用方法に注意する必要があります。

ほとんどの場合、静的メンバーを含むクラスに非静的ラッパーを追加することになります。そうしないと、それらをモックすることができないためです。

静的メソッドはテスト可能性の死であり、これについてのより良いアイデアを与えるかもしれません。

于 2012-04-08T12:51:53.360 に答える
0

オブジェクトが必要な場合は、「_ class34.DoSomething(parameter1、parameter2、parameter3、parameter)」のように呼び出す必要があると思います。

読むと、次のようになります。オブジェクト_Class34に対して、このパラメーターを使用して何かを実行します。

于 2012-04-08T12:38:55.690 に答える
0

オブジェクト指向プログラミングの背後にある全体的な考え方はsomefunction(somestruct)、過去のように書く必要はないということですが、代わりに書くことができるので、に属するsomestruct.somefunction()ことがはるかに明確になります。somefunction somestruct

もちろん、好きなように行うことができますが、2番目の例はメンバー関数が発明された理由である方法であることを忘れないでください。

于 2012-04-08T12:46:13.503 に答える
0

しかし、デフォルトではインスタンスメソッドを使用します。私は、インスタンスメソッドよりも理にかなっている場合、または他の方法がない場合にのみ、静的を使用する傾向があります。静力学を使用すると、単体テストが複雑になる可能性があります。静的フィールドも使用する静的メソッドは、メモリリークの潜在的な原因です(はい、.NETでも)。

したがって、たとえば、ファイルからオブジェクトを逆シリアル化してオブジェクトを作成する場合のように、作成中に何が起こるかをより明確にするために特別な作成メソッドが必要な場合は、静的を使用します。

MyClass myObject = MyClass.ReadFromFile("serialized.xml");

これは次よりも読みやすいです:

MyClass myObject = new MyClass("serialized.xml");

また、すべてのインスタンス間でクラス全体の状態情報を共有したい場合は、staticsメソッド(およびメンバー)を使用します。

もちろん、クラス全体が静的である場合、静的メンバーは必須です。

于 2012-04-08T13:55:18.153 に答える