我在基类中有一个 protected 方法:
public class BaseClass
{
protected virtual void Foo(){}
}
该方法被派生类之一覆盖:
public class Derived1 : BaseClass
{
protected override void Foo()
{
//some code...
}
}
另一个派生类拥有第一个派生类的实例。
当我尝试访问 Foo 方法(如前所述,存在于基类中)时出现错误:
public class DerivedClass2 : BaseClass
{
BaseClass instance = new DerivedClass1();
instance.Foo(); // Here I get an error
}
我得到的错误:
Error CS1540: Cannot access protected member 'BaseClass.Foo' via a qualifier of type 'BaseClass';
the qualifier must be of type 'DerivedClass2' (or derived from it)
我明白 protected 成员不应该将他们的值(value)放弃给任何其他实例,即使是从同一类型派生的实例,
但是有没有办法不将方法修改为公开的?
最佳答案
您可以将 Foo 方法声明为 protected 内部....
public class BaseClass
{
protected internal virtual void Foo(){}
}
public class Derived1 : BaseClass
{
protected internal override void Foo()
{
//some code...
}
}
这里“ protected 内部”意味着该成员对于任何继承基类的类都是可见的,无论它是否在同一个程序集中。该成员也可以通过同一程序集中任意位置声明的该类型的对象可见。
关于c# - 从派生类访问 protected 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22605865/