2010-03-12 78 views
1

我正在使用模型UserRepository->用戶什麼是隻讀屬性的最佳方法

存儲庫用於保存和加載用戶。

我希望能夠在存儲庫中設置ID,但我不希望它被UI訪問。

User和Repository可在Core項目中找到,並可在Web中找到UI。

有沒有辦法做到這一點,就像屬性的修飾符,或者我應該把ID放在User構造器中?

感謝

回答

8

您可以使用屬性,而不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 

在第二個/自動的情況下,它確實只是編譯器做第一個例子,只是更快,更容易。

+0

+1您的回答比我的好:) – Kelsey 2010-03-12 19:47:59

+0

如果適用,您可以使用保護而不是私人。這將適用於第一版和自動屬性版本。 – Brian 2010-03-12 21:33:05

+1

@Brian - 好點,如果您只想在同一個程序集中公開它,也可以使用'internal'修飾符。在這種情況下,您的數據層可以設置它,但不是另一個項目中的UI層,等等。 – 2010-03-12 21:37:43

-1

我已經使用這個彭定康(不熟悉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代碼對對象具有隻讀訪問權限,而其他部分可以讀取 - 寫入訪問。

我可能會做「富」抽象以及(我想不到的情況下,我沒有)。

+0

-1:這不是在C#中完成的方式。 – Brian 2010-03-12 21:30:10

+0

這就是Java ...... – Dykam 2010-03-12 21:50:37

+0

不僅僅是Java ......在多種語言中使用它。就這樣,我明白了,A類的C#屬性如何給出2個類(例如X表示只讀,Y表示讀/寫)訪問? – TofuBeer 2010-03-13 00:54:37

相關問題