禁用抽象方法的实现

时间:2012-07-16 05:38:30

标签: c#

我的代码下面有一个接口,抽象类和一个类。我想在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 
    {

    }

 

3 个答案:

答案 0 :(得分:4)

即使有可能,也不错:为什么你只想实施合同的一部分?

您似乎遇到此问题,因为ICustomer界面正在尝试执行太多不同的操作(从而违反了Interface Segregation Principle)。

如果您不总是需要或想要实现Print方法,请将其从界面中取出,或将其移至单独的界面中。

答案 1 :(得分:1)

当派生类不需要实现基类的抽象方法时,唯一的情况是将派生类声明为抽象类。

正如MSDN doc所说here,  “如果基类将成员声明为抽象,那么必须在任何直接从该类继承的非抽象类中重写该方法。如果派生类本身是抽象的,它将继承抽象成员而不实现它们。”

所以你可以声明FreeCustomer是抽象的,然后不需要在那里实现打印,虽然我认为它没有任何用途。

答案 2 :(得分:0)

在您的特定情况下,请勿在基础abstract类中将该函数声明为Customer - 而是使用public virtual,并提供实现基类。

然后你所要做的就是在你真正需要Print()功能的类中覆盖它,在其他任何事情中它都不会做任何事情(因为将使用基础实现)。这意味着您可以将其保留在界面上。