2

プロパティとメソッドを指定したいユーザーコントロールがいくつかあります。

これらはすべて「Foo」や「Bar」などのプロパティを持っているため、基本クラスから継承します。基本クラスを使用した理由は、これらのすべてのプロパティを各派生クラスに手動で実装する必要がないためです。

ただし、基本クラスはメソッドを「実行」する方法を知らないため、基本クラスではなく派生クラスにのみ存在するメソッドが必要なので、このためのインターフェイスを使用することを考えています。それを基本クラスに入れる場合、値を返すためにいくつかの本体を定義する必要があり(これは無効になります)、オーバーライドするメソッドが基本を呼び出さないことを常に確認してください。方法

基本クラスとインターフェイスの両方を使用してメソッドを公開するための正しい方法はありますか?それは非常に回りくどいようですが、私がそれをすることについて考えるすべての方法は間違っているようです...

質問が明確でない場合はお知らせください。おそらくばかげた質問ですが、私はこれを正しく行いたいと思います。

編集:あなたの優れた抽象的な提案をしてくれたすべての人々に感謝しますが、これはデザイナーを壊します。抽象が選択可能なオプションではなかった場合、あなたはどうしますか?

4

5 に答える 5

5

または、基本クラスでメソッドを「abstract」として定義することもできます。これにより、クラスでメソッドを実装する必要がなくなります。例えば:

abstract class A
{
   public abstract void B();
}

もちろん、これにより基本クラスも抽象化されますが、これは問題なく機能するようです。

MSDNの抽象メソッドを参照してください。

アップデート

設計者の問題により、これabstractはオプションではないため、メソッドを基本クラスの一部として定義し、基本クラスから直接呼び出された場合はNotImplementedExceptionをスローすることができます。

void DerivMethod()
{
    // Must be implemented by derived class
    throw new NotImplementedException();
}

そうでなければinterface、特に上記があなたの口に悪い味を残す場合は、を使用することは問題ありません...

于 2010-06-08T16:30:01.137 に答える
2

基本クラスを抽象クラスにする必要があります。次に、基本クラスは、メソッドabstractをマークすることにより、インターフェイスを実装できます。

http://msdn.microsoft.com/en-us/library/aa664435(VS.71).aspx

于 2010-06-08T16:30:44.593 に答える
1

基本クラスでメソッドを抽象としてマークします。派生クラスに実装する必要がありますが、基本クラスにはメソッド定義が必要ありません。

于 2010-06-08T16:31:37.500 に答える
1

私は他の人にも同意しますが、ユーザーコントロールを抽象化することには、設計者にとっていくつかの問題があります。多くの場合、設計者は抽象的なユーザーコントロールを表示しません。

基本クラスにインターフェイスメソッドを実装します。継承者がこれらのメソッドを適切にオーバーライドしていることを確認する場合は、メソッドでNotImplemented例外またはAssert.Failをスローできます。

于 2010-06-08T16:35:02.753 に答える
0

基本クラスで関数シグネチャを宣言し、「abstract」修飾子を使用します。

于 2010-06-08T16:31:53.567 に答える