![](/img/trans.png)
[英]How can I prevent a class from being injected into other classes via dependency injection?
[英]Prevent other classes from altering a list in a class
如果我有一個包含例如List <string>的類,並且我希望其他類能夠看到列表但是沒有設置它,我可以聲明
public class SomeClass()
{
public List<string> SomeList { get; }
}
這將允許另一個類訪問SomeList而不設置它。
但是,盡管調用類無法設置列表,但它可以添加或刪除元素。 我該如何預防呢? 我想我可以使用一個字段並返回List的副本而不是使用屬性,但這感覺不對。
(這應該很簡單但我必須遺漏一些......)
您將無法使用autoproperty。
public class SomeClass()
{
private List<string> someList;
public IList<string> SomeList {
get { return someList.AsReadOnly(); }
}
}
您將要將列表作為ReadOnly列表返回。 您可以使用以下代碼執行此操作:
using System.Collections.ObjectModel;
public ReadOnlyCollection<string> GetList() {
return SomeList.AsReadOnly();
}
返回IEnumerable<string>
,它是不可變的。 getter應如下所示:
public IEnumerable<string> SomeList
{
get
{
foreach(string s in someList) yield return s; // excuse my inline style here, zealots
yield break;
}
}
public class SomeClass()
{
private List<string> _someList = new List<string>();
public IList<string> SomeList
{
get { return _someList.AsReadOnly(); }
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.