我正在使用模型UserRepository->用戶什麼是隻讀屬性的最佳方法
存儲庫用於保存和加載用戶。
我希望能夠在存儲庫中設置ID,但我不希望它被UI訪問。
User和Repository可在Core項目中找到,並可在Web中找到UI。
有沒有辦法做到這一點,就像屬性的修飾符,或者我應該把ID放在User構造器中?
感謝
我正在使用模型UserRepository->用戶什麼是隻讀屬性的最佳方法
存儲庫用於保存和加載用戶。
我希望能夠在存儲庫中設置ID,但我不希望它被UI訪問。
User和Repository可在Core項目中找到,並可在Web中找到UI。
有沒有辦法做到這一點,就像屬性的修飾符,或者我應該把ID放在User構造器中?
感謝
您可以使用屬性,而不setter和私有變量是這樣的:
private int _id; //Set locally
public int ID
{
get { return _id; }
}
//in the class _id = 5;
或者使用自動屬性,像這樣的私人二傳手:
public int ID { get; private set; }
//in the class ID = 5; this won't work outside the class
在第二個/自動的情況下,它確實只是編譯器做第一個例子,只是更快,更容易。
我已經使用這個彭定康(不熟悉C#這樣,但這個想法應該工作):
class Foo
{
protected int id;
public int GetID()
{
return (ID);
}
}
class MutableFoo : Foo
{
public void SetID(int val)
{
id = val;
}
}
那麼UI只與它的「富」類交易只讀,而其它部分可以處理讀/寫的「MutableFoo」。您應該只能創建「MutableFoo」的實例,然後將它們傳遞到代碼的其他部分,然後將其作爲「Foo」接收,這是UI代碼對對象具有隻讀訪問權限,而其他部分可以讀取 - 寫入訪問。
我可能會做「富」抽象以及(我想不到的情況下,我沒有)。
+1您的回答比我的好:) – Kelsey 2010-03-12 19:47:59
如果適用,您可以使用保護而不是私人。這將適用於第一版和自動屬性版本。 – Brian 2010-03-12 21:33:05
@Brian - 好點,如果您只想在同一個程序集中公開它,也可以使用'internal'修飾符。在這種情況下,您的數據層可以設置它,但不是另一個項目中的UI層,等等。 – 2010-03-12 21:37:43