我遇到了这样的情况,我可以在外面修改班级的私人成员.这是我的班级:
public class MyClass
{
private List<string> _myClassMember = null;
public MyClass()
{
_myClassMember = new List<string>();
}
public List<string> GetClassMembers()
{
return _myClassMember;
}
public void PrintMembers()
{
Console.WriteLine("No of items in member {0}", _myClassMember.Count.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
这是它的调用方式:
class Program
{
static void Main(string[] args)
{
MyClass cls = new MyClass();
cls.PrintMembers();
IList<string> lst = cls.GetClassMembers();
lst.Add("Item1");
lst.Add("Item2");
cls.PrintMembers();
}
}
Run Code Online (Sandbox Code Playgroud)
它打印如下:
No of items in member 0
No of items in member 2
Run Code Online (Sandbox Code Playgroud)
能够更新外面的私人会员是否正确?
是.它只是私人的参考.如果您分享该引用.然后外部代码可以自由修改其内容.
如果您不希望外部代码修改内容,则使用不可变集合类.
虽然您可以修改myClassMember引用的列表的内容,但是您不能从类外部执行的操作是更改myClassMember指向的列表.
这是最近这个问题第二次出现.
考虑这一点的正确方法是数据不是私有的.这个名字是私有的.如果你选择以某种方式在类之外共享数据,那就不会破坏封装.那其实是事情私有的是名 _myClassMember,这只是指领域代码是类里面.
看到
更多细节.
| 归档时间: |
|
| 查看次数: |
267 次 |
| 最近记录: |