如果我們將屬性定義爲public
屬性,並且在此屬性中我們有一個protected
獲取器。這是什麼意思?如果財產是公共的,爲此定義一個受保護的吸氣者是什麼意思? 請參見下面的代碼:這是什麼意思? [c#]
public ISessionFactory SessionFactory
{
protected get { return sessionFactory; }
set { sessionFactory = value; }
}
如果我們將屬性定義爲public
屬性,並且在此屬性中我們有一個protected
獲取器。這是什麼意思?如果財產是公共的,爲此定義一個受保護的吸氣者是什麼意思? 請參見下面的代碼:這是什麼意思? [c#]
public ISessionFactory SessionFactory
{
protected get { return sessionFactory; }
set { sessionFactory = value; }
}
在C#中,您可以擁有getters and setters的訪問級別(請參閱access modifiers)與整體屬性不同。這是最常見的模式
public class FooObject
{
public String Foo
{
get;
private set;
}
}
允許對象實例化FooObject檢索美孚的價值,但沒有設置它的值。 setter上的私有修飾符表示只有FooObject本身具有此能力(不包括使用反射)。
有兩個優點是:
通過增加自動屬性(沒有變量需要分配get和set值),這使得物業變量的私人環境(它爲您創建在編譯時),無需顯式創建變量即可完成。如果沒有這個,你就不能使用自動屬性,除非你總是希望get和set函數全部公開,所有私有等。
它允許抽象級別,以便所有方法無論是公共的,私有的,或以其他方式通過該財產而不直接訪問私有變量。有關更多信息,請參見question。
在您的實例中,其他對象可能會設置會話工廠的值,但只有從它繼承的類可以檢索它。大多數情況下,如果一個對象可以設置該值,它也可以檢索它,但有些情況下不允許它。這是允許的,因爲set事件不允許比爲整個屬性定義的更大的訪問量。
我能想到的最好的例子就是如果在set事件中,set對象被修改了。例如,如果set事件設置了一個連接對象,並且在設置事件上添加了連接字符串,並且打開了與數據庫的連接(在我的例子中,我可能會重構代碼而不以這種方式行事,但是可能會出現類似的情況)。
這意味着,吸氣劑只能由子類調用。 getter之前的'protected'可以覆蓋屬性的getter部分的'public'。
protected關鍵字是成員訪問修飾符。受保護的成員可以從聲明該類的類中進行訪問,也可以從派生於聲明該成員的類的任何類中進行訪問。
http://msdn.microsoft.com/en-us/library/bcd5672a(VS.71).aspx
受保護的GET意味着這個屬性的getter只能從一個類繼承這個類的訪問。該集被假定爲公開的,所以該屬性可以被公開設置。
這是可以允許的,儘管擁有一個吸氣器的能見度低於吸氣器也是非常奇怪和意外的。 – 2010-04-17 13:02:43
我不明白爲什麼它會是奇怪或意外的。如果公共吸氣劑沒有增加任何價值,爲什麼它應該是?然而,課堂上可能需要外部輸入,在這種情況下,擁有公開製片人是非常合理的。將其視爲方法參數。你可以設置參數,但是除非方法實際返回它們,否則你不能取回它們。當然得到它們是沒有意義的,如果你是來電者,你已經可以訪問它們。如果你不是主叫方,那麼你可能沒有訪問權限的一個很好的理由。封裝是很好的OOP。 – 2010-04-17 13:48:36
@macke,在這種情況下,我會強烈選擇Set或Initialize方法,因爲屬性的語義意味着可觀察性。如果我可以設置Instance.X =值,我希望能夠立即斷言(Instance.X ==值)(如果沒有執行該集合的異常)。 – 2010-04-17 14:15:14