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

前端之家收集整理的这篇文章主要介绍了C#覆盖公共成员并使其不公开前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
可能?你能改变任何东西的访问权吗?

解决方法

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

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

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

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();

猜你在找的C#相关文章