11

ToString() メソッドが必要な public static クラスがあります。

public static string ToString() として定義しましたが、次の警告が表示されます。

「Class.ToString()」は、継承されたメンバー「object.ToString()」を非表示にします。現在のメンバーでその実装をオーバーライドするには、override キーワードを追加します。それ以外の場合は、新しいキーワードを追加してください。

override キーワードを追加すると、代わりに次のエラーが発生します。

静的メンバー 'Class.ToString()' をオーバーライド、仮想、または抽象としてマークすることはできません

その警告を取り除き、静的クラスに ToString() メソッドを持たせるにはどうすればよいですか。

ありがとう、
キース

4

3 に答える 3

16

はい、「new」修飾子を使用すると、コンパイラの警告が効果的に沈黙しますが、静的メソッドでインスタンス メソッドを明示的に隠しています。(これは、メソッドのオーバーライドとは異なります。) 通常、非常に正当な理由がある場合を除き、インスタンス メソッドを非表示にしたくありません。また、呼び出しの動作セマンティクスが実際に変更されるため、静的メソッドで非表示にするべきではありません。.NET のすべてのオブジェクトには、開発者が期待する特定の動作を持つ ToString() という名前のインスタンス メソッドがあります。新しい静的メソッドでその動作を非表示にすることで、多くの混乱を招く可能性がある期待を変更しています。

あなたは何を「ひもでつなぐ」のですか?通常、静的クラスは内部状態を保持しないため、ToString() 呼び出しの論理出力として提供する内部データは実際には存在しないはずです。クラスの設計を再考するか、インスタンス ToString() を非表示にせずにメソッドの目的をより明確に示す別のメソッド名を提供することをお勧めします。

于 2008-11-10T17:04:11.323 に答える
3

静的クラスでは、ToString をオーバーライドできません。.ToString はインスタンス メソッドであり、定義により、静的クラスは静的メンバーのみを持つことができます。

また、なぜ .ToString() をオーバーライドしたいのでしょうか? クラスのインスタンスを取得する方法がないため、関数を呼び出す方法がありません。

注: 新しい構文を使用しても、.ToString はオーバーライドされません。Object.ToString() メソッドとはまったく関係のない新しいメンバーを作成します。

于 2008-11-10T16:40:19.907 に答える
2

さて、質問をする際に、私は答えを見つけました:

新しい修飾子:

http://msdn.microsoft.com/en-us/library/51y09td4(VS.71).aspx#vclrfnew_newmodifier

これが今の方法です:

public new static 文字列 ToString()

ありがとう、キース

于 2008-11-10T16:39:43.980 に答える