在C#中,如何使私有成员可以在派生类中访问?

4
如何在C#中让派生类访问基类的私有函数?

在基类中创建公共属性以访问私有字段。 - Prashant Lakhlani
5个回答

11

要么:

  1. 将其访问级别从 private 提升为 protected
  2. 或添加另一个保护成员来访问它,并在派生类中使用该成员
  3. 或使用反射
  4. 或更改代码,使您不需要访问它

如果是私有属性或方法,我会选择1,如果是私有字段,我会选择2。我会围绕该字段添加一个受保护的属性。


5

+1. 如果您能够更改基类,那么受保护的访问修饰符就是为此而设计的。 - fletcher

4

本回答仅供完整性参考。在几乎所有情况下,请使用其他回答中的建议。

其他回答都是正确的,除了一种情况:当派生类是基类的嵌套类型时,派生类可以访问基类的私有成员。这实际上是模仿C#中的Java枚举的一个有用特性。以下是示例代码(不是Java枚举,只是“访问私有成员”部分):

public class Parent
{
    private void PrivateMethod()
    {
    }

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

@Swathi:我发布的代码可以编译通过,所以我不知道问题出在哪里。请提供更多细节。(仅说“它不起作用”几乎从来没有帮助过。显而易见的后续问题是:“它以何种方式不起作用?”) - Jon Skeet

3

使用反射:

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

2

不行。如果您希望该方法可以被派生类访问,则需要将其改为protected


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接