我已经给出了以下代码示例:
public static class A
{
private static B _b;
public static B GetB
{
get
{
if(_b == null)
{
_b = B.load();
}
return _b;
}
}
public static void Save()
{
if(_b == null)
{
_b = B.load();
}
_b.Save()
}
}
public class B
{
public string Value{ get; set;}
public void Save()
{
//value is being save to somewhere
}
public static B load()
{
B b = new B();
// .....
//b.Value is loaded from somewhere
// ......
return b;
}
}
接下来是我需要解决的问题:
A.GetB.Value = "value"; // OK
B.Load().Value = "value"; // I need to prevent this
以上两行代码完全相同,但......
B.Load()。值应该无法从任何其他地方访问,但A类除外
如果有人有想法,请告诉我......
谢谢,
Fivee
答案 0 :(得分:3)
基本上你要做的就是不要在A类中嵌套B类,并且A类仍然拥有对Bs字段的独占访问权。如果A和B是独立的类,则这是针对封装的。
您正在寻找friend classes。 C ++中允许使用这些类型的类。 C#不支持朋友类,我们对朋友类最接近的是朋友集。请参阅此post。
因此,如果你真的想要这个功能,你需要像其他人建议的那样嵌套它们。
此外,如果您最终执行嵌套类解决方案。 Here是一种绝对漂亮的方式,只处理嵌套类的私有成员对其容器类的访问。这有点hacky但仍然......
答案 1 :(得分:2)
我认为另一种解决方案可能是让B
成为public
类(因为它已经存在),并使B.Load
成为internal
方法。但是,这只有在您从另一个程序集中调用A.GetB
时才会起作用(并且只计划 )。