2017-01-20 5 views
1

インスタンスクラスで静的コンストラクタを使用して、このクラスをいくつかのリソース定数で初期化します。私のより多くの経験の同僚の発言、それはコード内の任意の静的な悪いC#のスタイルです。彼の意見でより信頼できるのは、このための外部公開読書クラスです。インスタンスクラスの静的コンストラクタ - Pros&Contras

しかし、VisualStudio C#は、最初のアドレスにある共通静的コンストラクタの実行を、共通のリソース、つまり上位クラスから呼び出すべき外部クラスに対して提供します。追加のエラーの原因ではありませんか?私はこの論理で正しいですか?

+1

(限り、彼らは別のスタイルを好む理由は、彼らが知っているように)何人かの人々が同意しないだろうし、それは大丈夫です"[あなたの同僚には悪いニュースがあります。](https://msdn.microsoft.com/en-us/library/acy3edy3.aspx) – BoltClock

+1

いくつかのコードを提供して、その周りを見たり議論したりすることはできますか? –

+1

スタティックはC#スタイルに劣りません。それが好ましい方法である多くのアプリケーションがあります。同僚に、彼が自分自身を開発者として感心している言語の主要な特徴全体に縛り付けてしまうことを教えてください。 – Abion47

答えて

1

ご質問は、コーディングスタイルについてです。静的なものを好む人もいれば、避けるほうがよい人もいます。

スタティックは非常に役に立ち、スタティックに依存するいくつかの機能があります。例えば、メイン、クラス拡張、シングルトンパターン。

私は自分のコードに静的に使用していました。なぜなら、たくさんのことが簡単にできるからです(共有するものを作ることについて心配する必要はありません)。しかし、私がユニットテストを始めたとき、私はそれにますます不安を感じました。定義による静的データは一度作成され、共有されます。つまり、ユニットテストの場合、このデータはテストで共有されます。テストの独立性をはるかに困難にし、セットアップ/ティアダウンの方法で手動ですべてをリセットする必要があります。

単なる単体テストやモジュール性のために、不変ではない(少なくとも不変の - >読み取り専用アクセスとして使用する)データのために静的なコンストラクタを使用することをお勧めします。不変のデータは、プログラム(またはテスト)が実行されている間は変更されないため、問題はありません。常に価値があると確信できます。

ここでも、これはコーディングスタイルのいくつかの種類であり、それは**コード内の任意の静的**悪いC#のスタイルである」

+0

ありがとうブルーノ!確かに、この議論の背後にある "悪臭"よりも、実際には:静的なデータは、プロジェクトの他の部分で開いているため、情報の破損につながる可能性があります。あなたは正しい:手動リセット強制は深刻な頭痛です。しかし、外部リソースの別のセットを取得する手動再起動を超えて、方法はありませんか? もちろん、いくつかの静的メソッド(プログラムメイン、いくつかのストリングメソッドなど)は避けられません。むしろ、C#コードの複雑さとデータ保護のバランスについてです。 –

+0

私は昨日直面したもう1つのケースがこの記事のインラインです:インスタンスクラスに静的コンストラクタを残しました。入力されたExcelファイルを読み込み、最初のアドレスの環境情報を対象クラスに設定します。本当に便利ですが、昨日私はこのクラスをUnit Testに含め、** System.TypeInitializationException **を得ました。どんな摂取@ブリュノベルモンド? –

+0

単体テストで1つのDLLが不足しているような気がします。すべての必要なDLLがユニットテストプロジェクトの出力ディレクトリにあることを確認し、明示的な参照を追加しないでください。 –

関連する問題