use*_*556 1 c# class access-modifiers friend
我有一个类 A,我需要从中访问类 B 的受保护成员,其方式与在 C++ 中使用朋友关键字的方式相同。但是,内部修饰符不适合我的需要。B 类将需要创建 A 类的实例,修改其私有数据,并返回对该类的引用。这些 A 类成员需要对原始调用者保持私有。
public class A
{
protected int x;
}
public class B
{
public static A CreateClassA()
{
A x = new A();
x.x = 5; // ERROR : No privilege
return x;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
您可以使用protected internal而不是internal授予对同一程序集中的所有类以及其他程序集中的子类的访问权限:
public class A
{
protected internal int x;
}
public class B
{
public static A CreateClassA()
{
A x = new A();
x.x = 5; // hurray
return x;
}
}
Run Code Online (Sandbox Code Playgroud)
这个问题在这一点上有点老了,但这是另一种方法,做你问的,没有讲座或手指摇摆:
考虑:
A foo = new A();
FieldInfo privateField = foo.GetType().GetField("x", BindingFlags.NonPublic | BindingFlags.Instance);
privateField.SetValue(foo, 5);
Run Code Online (Sandbox Code Playgroud)
警告:使用上述代码会破坏封装,弯曲您的脊椎,并且可能会因 OO 纯粹主义者的尖锐尖叫而导致耳朵损伤。
...但它适用于工厂类,弥补了 C# 缺少朋友关键字的问题。
警告 2:这很慢。
| 归档时间: |
|
| 查看次数: |
23128 次 |
| 最近记录: |