You*_* Ch 4 c# inheritance abstract-class
我需要继承一个基本的抽象类.我想只覆盖一个方法.但Visual Studio要求我全部覆盖它们.所以我重写了超过10种抛出的方法,NonImplementedException我觉得它很愚蠢.有没有办法只覆盖我需要的东西.或者至少告诉Visual Studio覆盖其余的(未实现的方法和属性)?
基类是由框架编写的,所以我无法改变它(我说的是Asp.net MVC的RoleProvider)
mih*_*irj 13
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
{
}
Run Code Online (Sandbox Code Playgroud)
在这里,编译器只会要求您override Method2()作为授权.它不会要求你覆盖Method1()或Method3().你可以override Method3()因为它带有关键字virtual.
这里真正的问题是,您的基类具有如此多的方法,以至于派生类只能使用它们的子集。这意味着您的基类很可能具有多重职责,从而违反了单一职责原则(SRP)。
解决方案是将您的基类分成几个较小的类,每个类只负责一个职责。
如果基类不是来自您,您确实需要实现所有这些方法。
如果基类是违反 SRP 的类,并且您的实现确实可以正常工作(如果您仅实现方法的一小部分),则可以创建从其他抽象基类派生的抽象基类。在抽象基类中,您可以实现所有不需要的方法并抛出NotImplementedException. 不要实现您需要的那些方法。
现在,从基类派生一个类 - 现在您只需实现您感兴趣的方法。请务必正确记录这一点。
有必要重写所有声明为 的方法abstract。你不能跳过非具体方法。如果你真的想做,那么就把你的类设置为抽象类。你无法改变抽象机制。
请记住,抽象类具有以下特征:
| 归档时间: |
|
| 查看次数: |
13251 次 |
| 最近记录: |