加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#覆盖公共成员并使其不公开

发布时间:2020-12-15 04:27:37 所属栏目:百科 来源:网络整理
导读:可能?你能改变任何东西的访问权吗? 解决方法 不,您可以在子类中使用私有方法隐藏公共成员,但不能在子类中使用私有成员覆盖公共成员.而实际上,这不仅仅是一个公共/私人的事情,而是适用于一般的缩小访问. 修改:通过隐藏更多的限制性访问 – 在这种情况下,私
可能?你能改变任何东西的访问权吗?

解决方法

不,您可以在子类中使用私有方法隐藏公共成员,但不能在子类中使用私有成员覆盖公共成员.而实际上,这不仅仅是一个公共/私人的事情,而是适用于一般的缩小访问.

修改:通过隐藏更多的限制性访问 – 在这种情况下,私有访问 – 您仍将从基类或子类引用中看到基类成员,但是当新的访问级别可用时,它将推迟到新方法.

因此,一般来说,当您隐藏时,隐藏在其访问级别可见时优先.否则原来的方法是使用的方法.

public class BaseClass
{
    public virtual void A() { }

    public virtual void B() { }
}

public class SubClass
{
    // COMPILER ERROR,can't override to be more restrictive access
    private override void A() { }

    // LEGAL,you can HIDE the base class method,but which is chosen 
    // depends on level accessed from
    private new void B() { }
}

所以SubClass.B()只有在可访问时隐藏基类方法.也就是说,如果在SubClass中调用SubClass.B(),那么它将采用B()的隐藏形式,但是由于B()是私有的,所以对于它们之外的类是不可见的,因此它们可以看到BaseClass .B().

长而短的是:

1)你不能覆盖一个方法来限制更多(访问明智).
2)您可以隐藏一个具有更严格限制的方法,但它只会在新的访问类型可见的情况下起作用,否则基本的方法就可以了.

public class BaseClass
{
    public virtual void A() { }
    public virtual void B() { }
}

public class SubClass : BaseClass
{
    public virtual void A() { B(); }

    // legal,you can do this and B() is now hidden internally in SubClass,// but to outside world BaseClass's B() is still the one used.
    private new void B() { }
}

// ...

SubClass sc = new SubClass();
BaseClass bc = new BaseClass();

// both of these call BaseClass.B() because we are outside of class and can't
// see the hide SubClass.B().
sc.B();
bc.B();

// this calls SubClass.A(),which WILL call SubClass.B() because the hide
// SubClass.B() is visible within SubClass,and thus the hide hides BaseClass.B()
// for any calls inside of SubClass.
sc.A();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读