0

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

    }

 
4

3 回答 3

4

即使有可能,这也是一个坏主意:为什么您只想执行合同的一部分?

您似乎遇到了这个问题,因为ICustomer接口试图做太多不同的事情(从而违反了接口隔离原则)。

如果您并不总是需要或想要实现该Print方法,则将其从接口中取出,或将其移至单独的接口中。

于 2012-07-16T05:44:39.280 回答
1

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

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

因此,您可以将 FreeCustomer 声明为抽象的,然后不需要在其中实现 print,尽管我认为它没有任何用途。

于 2012-07-16T06:12:39.080 回答
0

在您的特定情况下,不要像abstract在基Customer类中那样声明该函数 - 而是使用public virtual, 并在基类中提供一个实现。

然后您所要做的就是在您实际需要该Print()功能的类中覆盖它,在其他所有事情中它什么都不做(因为将使用基本实现)。这意味着您可以将其保留在界面上。

于 2012-07-16T05:56:16.580 回答