インスタンスメソッドで静的データを扱う場合、私が考えることができるのは、マルチスレッドアプリケーションでの同期だけです。私は静的メソッドからインスタンスデータを扱うときに悪影響を考えることはできません。しかし、ちょうど何かがはすることができますそれを意味するわけではありませんする必要があります。
ここでは、指定した具体例を示します。
クラスAは、インスタンスベースであり、二重の のProductPrice呼ば インスタンスフィールドを持っています。クラスBは静的であり、 PlayAroundWithPrice(倍精度)と呼ばれる 静的メソッドを持ち、 コーダーはProductPrice フィールドを渡します。
もちろん、そこにこの例では何も技術的に違法ではありませんが、それは私のために穀物に反します。まずクラスAのProductPriceフィールドは、クラスBが操作できるため、明らかに公開されています。カプセル化の目的のために、私は個人的にフィールドをプライベートにし、アクセスするためにパブリックプロパティを使用します。次に、ProductPriceはパブリックプロパティではなくパブリックフィールドなので、Class AがProductPriceが無効な値(負の値など)に設定されるのを防ぐ方法はありません。三番目(前述)のように、この例題がマルチスレッドのプログラムで発生すると、同期の問題が発生する可能性があります。第4に、私はこれが本当のこすりだと思います、なぜクラスBの静的メソッドをクラスAのフィールドで操作するのですか?静的メソッドをクラスAに配置してみませんか?
私はこれを固くて速いルール(おそらく単純なルール)にすることはできませんが、静的メソッドを使用することで、メソッドを使用するためだけにオブジェクトを作成するコストを支払うこと。
たとえば、私が作業しているプロジェクトでは、IPHeaderクラスがあり、これはバイトバッファからIPHeaderインスタンスを完全に構築します。しかし、ほとんどの場合、私はIPHeaderから2つの値しか必要としません。だから、IPHeaderインスタンスの作成とガベージコレクションに関連するコストを避けるために、バイトバッファから値を直接抽出する静的メソッドをいくつか追加しました。
私はあなたの質問を正しく理解してくれることを願っています。
「静的メソッドからインスタンスデータを処理する意味は何ですか? – thomasrutter