我有一個抽象類,它是通用的,像這樣:修改參考對象,以避免受保護的二傳手
class AbstractClass<T>
{
public T Data {get; protected set;}
}
在所有情況下,T是一個IEnumerable。在大多數情況下,它是一個List。但在特殊情況下,T可以是一個字符串,它是一個字符集合。 T是字符串時允許修改數據的最佳方法是什麼?
我的想法是簡單地獲取Data的值,然後爲其分配一個新值;
var data = Obj.Data;
data = "string";
這會做我期望的嗎?有沒有什麼陷阱?有沒有更好的辦法?
編輯:
的根本原因設置器保護,是因爲它是最常見的集合,並且意圖是新構造函數集合。其次,我可能應該添加這個,Data對象可以是一個INotifyPropertyChanged。在課程的其餘部分有一些樣板代碼,但基本前提是我不想擔心跟蹤通知中Data
的分配。
class Concrete<T> : AbstractClass<T>
{
public Concrete(T t)
{
Data = t;
}
}
string str = "String";
Concrete<string> blah = new Concrete<string>(str);
Console.WriteLine(blah.Data); // "String"
string temp = blah.Data;
temp = "Assign";
Console.WriteLine(blah.Data); // "Assign"
我想要最後一行打印「分配」,但它打印「字符串」。有沒有辦法在不改變保護的情況下完成此操作?我正在考慮用C++來修改地址。
解釋你的問題更多一些。 – Amit
爲什麼你需要修改字符串?爲什麼不公開setter或者用新的'Data'值來創建對象的新實例呢? – Kote
字符串是C#中不可變的數據類型,你不能修改它。我不知道你爲什麼要這樣做,但也許使用char數組會更容易。 – tmlye