如何正确继承和隐藏基本方法

Ign*_*cia 1 .net c# oop inheritance

我有以下继承:

class A
{
    void Configure(object param1) {...};
}

class B : A
{
    void Configure(object param1) {...}; // The method is not defined in B, it is available from the base class. This is just the desired interface of class B
}

class C : A
{
    void Configure(object param1, object param2) {...};
}
Run Code Online (Sandbox Code Playgroud)

我不希望C类具有可见的param1配置,因为在这种情况下它会使对象不完整.

我试过覆盖但覆盖不能改变可见性.

我发现的唯一方法是调用类A方法protected void ConfigureBase(object param1) {...};并使方法B类调用ConfigureBase.

由于我对这个设计并不完全满意,因为它让我重新定义了每个类,因为Configure有一个标准的处理方式吗?

Ser*_*rvy 5

这是不可能的.你可能有这个方法只是抛出一个异常所以它不能被使用,但编程中继承的基本原则之一是,一个孩子总是可以被视为它的父类型.以下应该做什么:

A obj = new C();

obj.Configure(new object());//should this work, or not?
Run Code Online (Sandbox Code Playgroud)

按照设计,没有办法限制孩子不能做父母可以做的事情.如果C真的不应该访问某个Configure(object obj)方法,您需要从根本上重新设计您的程序.这可能意味着C真的不应该扩展A(它可能对两者都有意义A并且C实现一个公共接口.),或者只是Configure真的不应该是这种类型的公共方法.如果不了解更多信息,很难提出替代方案.

  • @SoMoS我的观点是,这是多态的一个基本概念,你可以将对象看作是它的基类之一,所以我发布的代码必须*能够工作; 你想做什么会违反这一点.如果`A`是一个抽象基类,那么也许它不应该有一个`Configure`方法.这听起来只是`B`和`C`应该有它,并有适当的过载. (2认同)