C# 将集合属性设置为只读的最佳方法
集合属性C# 将集合属性设置为只读的最佳方法,c#,.net,architecture,C#,.net,Architecture,集合属性 public List<MapMarker> Markers { get; set; } public List<UIReport > Reports { get; set; } 公共列表标记{get;set;} 公共列表报告{get;set;} 如果想要只读集合,请使用该类 var coll=new ReadOnlyCollection(“myreadonlycollection.ToCharArray()); 如果想要只读集合,请使用该类 var coll
public List<MapMarker> Markers { get; set; }
public List<UIReport > Reports { get; set; }
公共列表标记{get;set;}
公共列表报告{get;set;}
如果想要只读集合,请使用该类
var coll=new ReadOnlyCollection(“myreadonlycollection.ToCharArray());
如果想要只读集合,请使用该类
var coll=new ReadOnlyCollection(“myreadonlycollection.ToCharArray());
要防止客户端分配全新的收藏,请使用私有字段(只读
如果适用)和公共的“仅获取”属性
private readonly IList<T> _items = new List<T>();
public IList<T> Items
{
get { return _items; }
}
private readonly IList\u items=new List();
公共物品
{
获取{return\u items;}
}
要防止客户端分配全新收藏并修改您的收藏,请使用IReadOnlyCollection
publicmyclass()
{
List=//新列表
_项目=新的只读集合(列表);
}
私有只读iReadOnly集合项目;
公共IReadOnlyCollection项目
{
获取{return\u items;}
}
将列表作为
IEnumerable
返回不是一个非常可靠的选项。客户机可以简单地将可枚举项向下转换回列表,然后进行变异。您应该将可变列表包装在一个ReadOnlyCollection
中,以防止客户端分配一个全新的集合,使用一个私有字段(readonly
如果适用)和一个公共get only属性
private readonly IList<T> _items = new List<T>();
public IList<T> Items
{
get { return _items; }
}
private readonly IList\u items=new List();
公共物品
{
获取{return\u items;}
}
要防止客户端分配全新收藏并修改您的收藏,请使用IReadOnlyCollection
publicmyclass()
{
List=//新列表
_项目=新的只读集合(列表);
}
私有只读iReadOnly集合项目;
公共IReadOnlyCollection项目
{
获取{return\u items;}
}
将列表作为IEnumerable
返回不是一个非常可靠的选项。客户机可以简单地将可枚举项向下转换回列表,然后进行变异。您应该将可变列表包装在一个类似这样的只读集合中
public List<MapMarker> Markers { get; private set; }
public List<UIReport > Reports { get; private set; }
公共列表标记{get;private set;}
公共列表报告{get;private set;}
像这样的东西
public List<MapMarker> Markers { get; private set; }
public List<UIReport > Reports { get; private set; }
公共列表标记{get;private set;}
公共列表报告{get;private set;}
您的意思是将收藏的设定者私有化;或者将集合中的所有可能属性设置为只读?通过只读
,您的意思是阻止类分配全新集合吗?或阻止客户端从该集合中添加/删除项目?或者两者都可以?如果不希望有人错误地添加或删除项目,可以返回IEnumerable
。定义“只读”在不同的上下文中可以表示不同的内容。是否要阻止myClass.Makers=someVal
,myClass.Makers.Add(someVal)
,或myClass.Makers[0]。SomeProp=someVal
@TimSchmelter返回IEnumerable不会阻止某人检测基础类型并将其强制转换回列表。您的意思是将集合的设置程序设置为私有;或者将集合中的所有可能属性设置为只读?通过只读
,您的意思是阻止类分配全新集合吗?或阻止客户端从该集合中添加/删除项目?或者两者都可以?如果不希望有人错误地添加或删除项目,可以返回IEnumerable
。定义“只读”在不同的上下文中可以表示不同的内容。是否要阻止myClass.Makers=someVal
,myClass.Makers.Add(someVal)
,或myClass.Makers[0]。SomeProp=someVal
@TimSchmelter返回IEnumerable不会阻止某人检测到基础类型并将其强制转换回列表。