我的代码下面有一个接口,抽象类和一个类。我想在FreeCustomer类中禁用抽象方法Print()的实现。这可能吗?非常感谢你。
public interface ICustomer
{
string CustomerName { get; set; }
double Amount { get; set; }
string Print();
}
public abstract class Customer : ICustomer
{
public string CustomerName { get; set; }
public double Amount { get; set; }
public abstract string Print();
}
public class GoldCustomer : Customer
{
public override string Print() {
return "You are a Gold Customer: " + CustomerName;
}
}
public class FreeCustomer : Customer
{
}
答案 0 :(得分:4)
即使有可能,也不错:为什么你只想实施合同的一部分?
您似乎遇到此问题,因为ICustomer
界面正在尝试执行太多不同的操作(从而违反了Interface Segregation Principle)。
如果您不总是需要或想要实现Print
方法,请将其从界面中取出,或将其移至单独的界面中。
答案 1 :(得分:1)
当派生类不需要实现基类的抽象方法时,唯一的情况是将派生类声明为抽象类。
正如MSDN doc所说here, “如果基类将成员声明为抽象,那么必须在任何直接从该类继承的非抽象类中重写该方法。如果派生类本身是抽象的,它将继承抽象成员而不实现它们。”
所以你可以声明FreeCustomer是抽象的,然后不需要在那里实现打印,虽然我认为它没有任何用途。
答案 2 :(得分:0)
在您的特定情况下,请勿在基础abstract
类中将该函数声明为Customer
- 而是使用public virtual
,并提供空实现基类。
然后你所要做的就是在你真正需要Print()
功能的类中覆盖它,在其他任何事情中它都不会做任何事情(因为将使用基础实现)。这意味着您可以将其保留在界面上。