我有一个类(myClass)包含一个私有类成员(类型为myData的currentData).我有一个属性(CurrentData),允许"获取"该成员.我想允许用户调用currentData上的函数,但是阻止他们对它进行外部引用.例如.
myClass a = new myClass();
// This is OK
a.CurrentData.somefunc();
// This is what I dont want
myData m = new myData();
m = a.CurrentData;
// ... some time passes here...
m.someFunc();
Run Code Online (Sandbox Code Playgroud)
虽然我理解他们引用相同的对象.由于内部成员可能会意外更改,因此我不希望将我的课程之外的引用保留给内部成员.
这可能吗?我已经离开了c#这么久我不记得它是如何工作的!
没有办法
a.CurrentData.somefunc();
Run Code Online (Sandbox Code Playgroud)
合法但是
m = a.CurrentData;
Run Code Online (Sandbox Code Playgroud)
非法. a.CurrentData.somefunc(); 本质上返回一个内联引用a.CurrentData,然后调用somefunc()该引用.
如果要阻止对内部对象的引用,则必须将方法添加到包含的类,然后将其传递给包含的对象:
public void DoSomeFuncWithCurrentData()
{
this.currentData.someFunc();
}
myClass a = new myClass();
a.DoSomeFuncWithCurrentData();
Run Code Online (Sandbox Code Playgroud)