c# - 从派生类访问 protected 方法

标签 c# overriding protected

我在基类中有一个 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/

相关文章:

java - Java 类中的默认可见性可以有 protected 成员吗?

c++ - 如果我使用转换来访问 protected 成员,会出现什么问题?

C# COM 跨线程

angularjs - 我如何用.success和.error扩展Angularjs中的$ q promise

c# - 如何绕过 Marshal.Copy(32 位)长度限制?

css - cuppa-ng2-slidemenu - 更改边距顶部和重新调整图标大小

overriding - 16位模式下的操作数大小前缀

java - 如何保护类,使其在包外不可见

C# 停止执行直到事件引发

C# LINQ to Entities 查询两个不同属性的交集