你能修改一个超类的私有领域吗?

Rob*_*cks 1 .net c# oop encapsulation private

我正在使用闭源基类.我可以以某种方式从继承类中更改基类中的私有字段吗?

假设以下类结构:

public class Parent
{
    private bool age;
}

public class Baby : Parent  
{
    public bool newAge{
        get {
           return age;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这当前给你一个编译时错误:

 'Parent.age' is inaccessible due to its protection level.
Run Code Online (Sandbox Code Playgroud)

你如何从婴儿班进入"年龄"领域?你能用反射或类似的东西吗?

vcs*_*nes 5

你可以,用反射.它看起来像这样:

public class Baby : Parent
{
    private readonly FieldInfo _ageField = typeof(Parent).GetField("age", BindingFlags.NonPublic | BindingFlags.Instance);
    public int newAge
    {
        get
        {
            return (int)_ageField.GetValue(this);
        }
        set
        {
            _ageField.SetValue(this, value);
        }
    }
} 
Run Code Online (Sandbox Code Playgroud)

如果它是由第三方提供的,那么没有什么可以阻止他们更改它,重命名它,它一起删除它.这是其中一个要点private.请记住,出于某种原因,它可能是私有的.修改你不认为的地方会导致意想不到的结果.