3

我有 3 节课:

  1. 基类
  2. 继承自 BaseClass 的中间类
  3. ClientClass 继承中间类

我想知道如何隐藏 BaseClass 中的方法以不出现在 ClientClass 中?

例子:

public class BaseClass
{
    public void BaseMethod1()
    {
    }

    public void BaseMethod2()
    {
    }
}

public class MiddleClass : BaseClass
{
    public void MiddleMethod()
    {
        this.BaseMethod1();
    }
}

public class ClientClass : MiddleClass
{
    public void Test()
    {
        this.MiddleMethod();
        this.BaseMethod1(); // I can't see this method here
    }
}

编辑:我修改了我的示例,我输入了“this.BaseMethod1();” 在中级

4

4 回答 4

4

您需要将该方法定义为私有的。仅供参考,这里有更多关于访问修饰符的信息

public:类型或成员可以被同一程序集或引用它的另一个程序集中的任何其他代码访问。

private:类型或成员只能由同一类或结构中的代码访问。

protected:类型或成员只能由同一类或结构中的代码或从该类派生的类中的代码访问。

internal:同一程序集中的任何代码都可以访问类型或成员,但不能从另一个程序集中访问。

于 2013-04-26T12:40:53.477 回答
4

我一直认为,如果您想对某些(但不是全部)派生类隐藏基类中的某些功能,那么这是代码异味,您的设计需要重新思考。

于 2013-04-26T12:44:48.137 回答
2

试试这个,它会破坏直接继承树:

public interface IBaseClass
{
    void BaseMethod1();
    void BaseMethod2();
}

public class BaseClass : IBaseClass
{
    public void BaseMethod1()
    {
    }

    public void BaseMethod2()
    {
    }
}

public class MiddleClass : IBaseClass
{
    BaseClass @base;

    public MiddleClass() { this.@base=new BaseClass(); }

    public void MiddleMethod()
    {
        @base.BaseMethod1();
    }

    void IBaseClass.BaseMethod1()
    {
        //@base.BaseMethod1();
        throw new NotImplementedException();
    }

    public void BaseMethod2()
    {
        @base.BaseMethod2();
    }
}

public class ClientClass : MiddleClass
{
    public void Test()
    {
        this.MiddleMethod();
        // 'ClientClass' does not contain a definition for 'BaseMethod1'
        //this.BaseMethod1(); 
    }
}
于 2013-04-26T13:13:15.083 回答
0

在 BaseClass 中将方法 BaseMethod1 定义为受保护,而不是在 MiddleClass 中使用函数 BaseMethod1。

public class BaseClass
{
    protected void BaseMethod1()
    {
    }

    public void BaseMethod2()
    {
    }
}

public class MiddleClass : BaseClass
{
    public void MiddleMethod()
    {
       base.BaseMethod1();
    }
    // hide method
    private new void BaseMethod1()
    {

    }
}
于 2013-04-26T12:39:06.563 回答