如果我们假设不希望基类成为纯接口类,并使用下面的两个示例,那么使用抽象或虚拟方法类定义是更好的方法吗?
“抽象”版本的优点是它看起来更简洁,并强制派生类提供希望的有意义的实现。
“虚拟”版本的优点是可以轻松地由其他模块插入并用于测试,而无需像抽象版本那样添加大量底层框架。
摘要版本:
public abstract class AbstractVersion
{
public abstract ReturnType Method1();
public abstract ReturnType Method2();
.
.
public abstract ReturnType MethodN();
//////////////////////////////////////////////
// Other class implementation stuff is here
//////////////////////////////////////////////
}
虚拟版本:
public class VirtualVersion
{
public virtual ReturnType Method1()
{
return ReturnType.NotImplemented;
}
public virtual ReturnType Method2()
{
return ReturnType.NotImplemented;
}
.
.
public virtual ReturnType MethodN()
{
return ReturnType.NotImplemented;
}
//////////////////////////////////////////////
// Other class implementation stuff is here
//////////////////////////////////////////////
}
return ReturnType.NotImplemented
?认真吗 如果不能在编译时拒绝未实现的类型(可以;可以使用抽象方法),则至少会引发异常。