3

私は現在、多くのレンダリングを使用して C# でプロジェクトを行っています。ほぼすべてのクラスで、レンダリングのスケーリングに使用される整数型の定数値があります。この定数を 1 か所で通常の変数として定義してから渡すことができることはわかっていますが、これは非常に面倒に思えます。C# で静的変数を使用できるのはいつですか? 私の問題に対する最も簡単な解決策は、他のすべてのクラスが参照できる静的変数を含むクラスを作成することです-それは悪い設計でしょうか?

4

5 に答える 5

8

値はどのくらい一定ですか? staticである場合は問題ありませんが、そうでない場合、特に複数のスレッドがある場合はreadonly、すぐに混乱する可能性があります。スケーリング係数は、私には難しい定数のようには思えません。つまり、そうではありません。 readonly

public const double ScaleFactor = 1;

一度ロードして放っておくものに静的変数を使用することを躊躇しません。それ以外は、おそらく(あなたの場合)RenderContextこの値と他のユーティリティメソッドを使用してカプセル化しRenderContext、メソッド間で渡します。これは、単体テストなどが必要な場合に、基礎となる実装から抽象化するのにも役立ちます。

より多くのプロパティが必要であることがわかったら (必然的にそうなるでしょう)、RenderContextクラスを拡張するだけで、それ以外は何も変更しません。


(編集)

また、将来のことも考慮してください。一度に複数のレンダリングを行うことはありますか? 私たちは今、多くのコアを持っているので、すべてのスレッドが値を共有している場合は static が適しています。ありますが[ThreadStatic]、比較すると少し面倒です。

于 2009-06-02T23:09:06.677 に答える
7

決して悪いデザインではありません。実際、静的メソッドと静的値を公開する Common または Utility 名前空間とクラスを使用すると、これらの値が 1 か所に集中するため、アプリケーション内のすべてのモジュールが適切な値を使用していることを確認できます。結束力は低いですが、メリットとしては許容範囲です。問題ないと思います。

于 2009-06-02T23:07:30.720 に答える
6

いいえ、それは実際には静的変数の完璧な候補です。さらに一歩進んで、インスタンス化できないようにクラスを静的にすることもできます。次に、すべての定数をそのクラスに追加し、必要に応じていくつかのヘルパー メソッドを追加できます。

于 2009-06-02T23:07:10.487 に答える
2

答えは、プログラムが機能し、保守可能である場合は、実行することです。

静的変数は罪ではありません。それらをいつ使用するかを知っておくのは良いことです。:)

于 2009-06-02T23:08:55.710 に答える
1

すべてのクラスがこの値を理解する必要があり、さらに別のことを行う必要がある場合は (pi のようなものでない限り)、クラスに 1 つの懸念事項があることを確認する必要があります。おそらく、その「値」は、コードベース全体で現在実行されている操作を実行できるオブジェクトになる必要がありますか?

于 2009-06-02T23:11:32.320 に答える