如何在C#中的派生类中访问私有成员?

时间:2010-08-20 08:24:12

标签: c#

如何在C#中将BaseClass私有函数访问到DerivedClass?

5 个答案:

答案 0 :(得分:10)

或者:

  1. 将其访问权限从private提升为protected
  2. 或者,添加另一个访问它的受保护成员,并从派生类
  3. 中使用它
  4. 或,使用反射
  5. 或者,更改代码以便您不需要访问它
  6. 在4中,如果是私有财产或方法,我会选择1,如果是私有领域,我会选择2。我会在现场附近添加一个受保护的属性。

答案 1 :(得分:5)

它不能。这就是私人access modifier的全部目的:

  

可以访问类型或成员   只能通过相同类中的代码或   结构

当然你总是可以使用反射。

答案 2 :(得分:4)

这个答案仅限于完整性。几乎在所有情况下,请使用其他答案中的建议。

其他答案都是正确的,除了有一种情况,派生类可以访问基类中的私有成员:派生类是基类的嵌套类型。这实际上可以成为在C#中模仿Java枚举的有用功能。示例代码(不是J​​ava枚举,只是“访问私有成员”位。)

public class Parent
{
    private void PrivateMethod()
    {
    }

    class Child : Parent
    {
        public void Foo()
        {
            PrivateMethod();
        }
    }
}

答案 3 :(得分:3)

反思:

FieldInfo f = typeof(Foo).GetField("someField", BindingFlags.Instance | BindingFlags.NonPublic);
fd.SetValue(obj, "New value");

答案 4 :(得分:2)

它不能。如果您希望方法可以被派生类访问,那么您需要改为protected