可能?你能改变任何东西的访问权吗?
解决方法
不,您可以在子类中使用私有方法隐藏公共成员,但不能在子类中使用私有成员覆盖公共成员.而实际上,这不仅仅是一个公共/私人的事情,而是适用于一般的缩小访问.
修改:通过隐藏更多的限制性访问 – 在这种情况下,私有访问 – 您仍将从基类或子类引用中看到基类成员,但是当新的访问级别可用时,它将推迟到新方法.
因此,一般来说,当您隐藏时,隐藏在其访问级别可见时优先.否则原来的方法是使用的方法.
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();