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)
你如何从婴儿班进入"年龄"领域?你能用反射或类似的东西吗?
你可以,用反射.它看起来像这样:
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
.请记住,出于某种原因,它可能是私有的.修改你不认为的地方会导致意想不到的结果.
归档时间: |
|
查看次数: |
1455 次 |
最近记录: |