6

基本的な抽象クラスから継承する必要があります。1 つのメソッドだけをオーバーライドしたい。しかし、Visual Studio ではそれらすべてをオーバーライドする必要があるため、10 個以上のメソッドをスローしてオーバーライドしていますNonImplementedException。必要なものだけをオーバーライドする方法はありませんか。または、少なくとも Visual Studio に残り (実装されていないメソッドとプロパティ) をオーバーライドするように指示するには?

基本クラスはフレームワークによって記述されているため、変更できません ( RoleProviderASP.NET MVC について話している)。

4

6 に答える 6

17
abstract class Base
{
    public void Method1()
    { 
        //some code
    } // No need to override
    public abstract void Method2(); // must be overriden
    public virtual void Method3()
    {
        // some code
    } // Not necessarily be overriden
}

class Derived : Base
{
}

override Method2()ここでは、コンパイラは義務としてのみ要求します。Method1()またはをオーバーライドするように求められませんMethod3()override Method3()ただし、キーワードを付けることはできvirtualます。

于 2013-02-18T08:49:08.557 に答える
3

ここでの本当の問題は、非常に多くのメソッドを持つ基本クラスがあり、派生クラスがそれらのサブセットでのみ機能することです。これは、基本クラスに複数の責任がある可能性が高いことを意味し、単一責任の原則 (SRP)に違反しています。

解決策は、基本クラスをいくつかの小さなクラスに分割し、それぞれが 1 つの責任を持つようにすることです。


基本クラスがあなたのものでない場合は、これらのメソッドをすべて実装する必要があります。
基本クラスが SRP に違反するクラスであり、メソッドの小さなサブセットのみを実装する場合に実装が実際に正しく機能する場合、その他の抽象基本クラスから派生する抽象基本クラスを作成できます。抽象基本クラスでは、必要のないすべてのメソッドを実装して、NotImplementedException. 必要なメソッドを実装しないでください。
次に、基本クラスからクラスを派生させます。必要なメソッドのみを実装する必要があります。これを適切に文書化してください。

于 2013-02-18T08:46:59.317 に答える
2

必要なものだけをオーバーライドする方法はありませんか。

いいえ、それが抽象クラスの仕組みです。クラスを抽象化する場合、すべてのメソッドを実装する必要はありません。

于 2013-02-18T08:46:15.127 に答える
1

として宣言されているすべてのメソッドをオーバーライドする必要がありますabstract。非具体的なメソッドをスキップすることはできません。本当にやりたい場合は、クラスを抽象化してください。抽象化のメカニズムを変更することはできません。

抽象クラスには次の機能があることに注意してください。

  1. 抽象クラスはインスタンス化できません。
  2. 抽象クラスには、抽象メソッドとアクセサーを含めることができます。
  3. sealed 修飾子を使用して抽象クラスを変更することはできません。つまり、クラスを継承することはできません。
  4. 抽象クラスから派生した非抽象クラスには、継承されたすべての抽象メソッドとアクセサーの実際の実装が含まれている必要があります。
于 2013-02-18T08:46:00.110 に答える