2016-10-07 30 views
-4

おはよう、静的メソッドと非静的メソッド

私はWindowsFormで作業しています。私は2つのソリューションを思いついた。私はどのソリューションが良い習慣であるか知りたかったのですか?

解決方法1: 私は電話のテキストボックスのような検証のための共通の静的メソッドを書かれている、mandatory_textboxキーを押しetc.Iは、このような多くの一般的な方法があります。だから私は何をしたのですか?私はユーティリティクラスを作成し、これらをすべてのstaticメソッドに入れました。次に、これらのメソッドをアプリケーション全体で使用しました。

解決方法2: 私はので、私がやった私は、ベースフォーム継承フォームクラスを作成した後、私は他のすべての形式(マルチレベルの継承)で、このベースフォームを受け継いで、アイデアを得ました。ベースフォームで

私は、ユーティリティクラスからすべての検証メソッドを移動し、非静的続きました。

私はUserControlについても教えました。もし私がそれを行うなら、私はアライメントタスクで再び仕事をします。だから、2つのソリューションが出てくるだけです

あなたはそれに従うことをお勧めできますか?代わりに、別の形の

+0

http://stackoverflow.com/questions/798036/how-to-decide-between-c-sharp-static-and-non-static-methods?rq=1 – Natrium

+0

http://stackoverflow.com/questions/11027540/static-methods-with-non-static-methods?rq = 1 – Natrium

+1

テキストボックスから派生させてカスタムTextBoxを作成することもできます。 – CSharpie

答えて

0

あり。これは、アプリケーションのコンテキストと機能に依存します。状況にいくつかの仮定に行く

は、ハイレベルの考えを以下の考慮 -

  • 検証は、他の形態に適用可能な唯一の特定の形態に関連している、とされていない場合、フォームクラスANS以内にそれを宣言プライベートメソッド。これらのバリデーションがクラスインスタンスを必要としない場合は、それらを静的と宣言することができます。
  • 異なるフォームでいくつかのバリデーションが一般的である場合、それらを静的として宣言することができます。これらのメソッドに制御を渡すのではなく、より良い設計のために検証する値を渡すよう注意してください。
  • は、それらがすべて、またはそうでない場合はフォームのほとんどに適用されている場合にのみ、塩基形態の検証を宣言し、彼らはすべてのインスタンスオブジェクトを使用しない場合は、もう一度、あなたがそれらをstaticとして

良いマークを付けることを検討しますディスカッションhere

0

使用ユーザーコントロール、これらの一般的なコントロールがすべてのフォームで使用されている場合。静的メソッドは、utilsの種類の要件に使用されるはずです。

+0

を思いついたので、私はユーザーコントロールについて教えました。もし私がそれを行うなら、私はアライメントタスクで再び仕事をします。だから、2つの解決策が出てくるだけです – user2115618

0

何度か前に、別のタスクで説明した両方のソリューションを使用しようとしました。これらのすべてにはプラスとマイナスがあります。

  1. したがって、最初のケースでは、ststicクラスとメモリ内のすべての静的メソッドの実装が1つしかありません。このメソッドは、他のオブジェクトインスタンスの任意の量に適用できます。しかし、私たちはそれを使用するすべての名前空間でこのクラスにアクセスする必要があります。 このクラスのコードに変更を加えると、このクラスに関連するすべてのオブジェクトインスタンスに適用されます。時には便利なこともあれば時々そうでないこともあります。

  2. は、第二のケースでは、(低効率)メモリに塩基形態の新しいインスタンスを得ますが、我々はまた、最初のアプローチのような継承されたフォームのための方法の一つのベースの実装を持っています。追加的なメリットとして、特定のインスタンスに対してのみ、特別なケース(必要な場合)のメソッドをオーバーライドすることができます。

いずれにしても、自分のタスクコンテキストに基づいて正しい決定を下すことができます。

1

あなたは非静的クラス内の静的メソッドを移動し、その機能を必要とするクラス/メソッドに(多分インタフェースを介して)具体的なオブジェクトを渡すことができます。こうすることで、コードのテストやデカップリングが容易になります。

たとえば、IValidatorというインターフェイスを実装しているPhoneNumberValidatorクラスの場合、bool Validate(string phoneNumber)というメソッドがあり、電話番号の検証が必要な場所に渡します。

私はこれが切り離されたアプリケーションを持っていることをお勧めすることwuouldと思います。 1が静的かどうかなどのメソッドを宣言する必要があるかどうかには単純明快な答えで

+1

恐ろしいWindowsフォーム開発者は、より多くのクラス、インターフェイス、コンストラクタを作成してインターフェイス実装を渡す必要があるため、このソリューションが気に入らなかったのです。 ) – Fabio

+0

@Fabio質問はベストプラクティスについてですので、私は私の答えには申し訳ありません:) – meJustAndrew

関連する問題