如何在C#中让派生类访问基类的私有函数?
要么:
private
提升为 protected
如果是私有属性或方法,我会选择1,如果是私有字段,我会选择2。我会围绕该字段添加一个受保护的属性。
本回答仅供完整性参考。在几乎所有情况下,请使用其他回答中的建议。
其他回答都是正确的,除了一种情况:当派生类是基类的嵌套类型时,派生类可以访问基类的私有成员。这实际上是模仿C#中的Java枚举的一个有用特性。以下是示例代码(不是Java枚举,只是“访问私有成员”部分):
public class Parent
{
private void PrivateMethod()
{
}
class Child : Parent
{
public void Foo()
{
PrivateMethod();
}
}
}
使用反射:
FieldInfo f = typeof(Foo).GetField("someField", BindingFlags.Instance | BindingFlags.NonPublic);
fd.SetValue(obj, "New value");
不行。如果您希望该方法可以被派生类访问,则需要将其改为protected
。