仍然可以从 C# 中的另一个类访问私有变量
Posted
技术标签:
【中文标题】仍然可以从 C# 中的另一个类访问私有变量【英文标题】:private variable is still accessible from another class in C# 【发布时间】:2020-12-20 16:21:47 【问题描述】:我有一个如下所示的 .cs 文件
namespace TarkovMapper.ClassObjects
class PointCloud_Object
public void AddPoint(PointEntry_Object point)
PointLayer pointLayer = LoadPointLayer(path);
pointLayer.Points[point.Location_x,point.Location_y]++;
private PointLayer LoadPointLayer(string path)
if (!File.Exists(path)) return new PointLayer(this.Width, this.Height);
Stream s = File.OpenRead(path);
BinaryFormatter b = new BinaryFormatter();
PointLayer returnObject = (PointLayer) b.Deserialize(s);
s.Close();
return returnObject;
[Serializable]
class PointLayer
public PointLayer(int width, int height)
this.Points = new int[width, height];
public int[,] Points get; private set; // <- private set!!!
public int Maximum get; private set;
我的问题是关于 PointLayer 类中的变量“点”。
尽管我有修改器 private set;
,但 PointCloudObject 中的以下行没有问题 pointLayer.Points[point.Location_x,point.Location_y]++;
。
这是为什么呢?
【问题讨论】:
【参考方案1】:修饰符指的是 Points 数组,而不是数组的各个元素。 PointCloud_Object 类无法将新数组分配给 PointLayer.Points 变量,但它可以操作单个数组元素。
【讨论】:
啊,谢谢!有没有办法可以保护 Array 内的元素,使其不能从 Class 外部修改? 我不认为只要数组暴露就可以直接保护元素。一种选择是将数组设为私有并提供一种返回单个元素的方法。另一种选择可能是使用替代数据结构而不是数组(也许 ReadOnlyCollection 会满足您的需求)。以上是关于仍然可以从 C# 中的另一个类访问私有变量的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Access VBA 中的另一个私有子获取私有子中声明的变量的值