2010-04-15 37 views

回答

2

金潤會在這裏,我不知道這是否是因爲「的IFoo」的功課,或者你所做的更換,以簡化的例子。

- : ServiceHostFactory,HostFactory繼承自ServiceHostFactory。

- HostFactory<TApp>,HostFactory是一個泛型類型,因爲它有一個TApp類型參數。每當有人使用HostFactory類時,他們可以指定TApp的類型,這會導致TApp出現在代碼中的任何位置。因此,如果類有一個功能TApp GetApp()他們指定<int>爲特普,然後GetApp實際上是int GetApp()

- where TApp : IFoo,特普必須實現的IFoo接口(這可能是一類爲好,表明它必須從類繼承,並不直接)。

- abstract,HostFactory是一個抽象類,意味着其他類可以繼承它,但沒有代碼可以實例化HostFactory本身。這就像我給你一輛汽車的框架一樣,並且說,你在法律上不允許在路上駕駛,但是歡迎你自己製造一輛汽車。

- public HostFactory是公共的,這意味着它在代碼被聲明的程序集之外是可見的。

編輯:更多關於仿製藥 我將開始與MSDN相當顯著名言:「泛型是C#2.0中最強大的功能。」

當您編寫一些可能適用於多種類型的東西時,您會使用泛型。例如,在我們使用2.0的泛型之前,我們必須將所有東西都放到一個Object中,然後才能將它放入一個集合中,這非常危險,因爲當您稍後得到時,copmpiler無法驗證您正在轉換爲正確的類型一個項目收集。用泛型我們可以做ArrayList<bool>來創建一個ArrayList的bool的,現在不需要投射。編譯器可以驗證我們將bool放入集合中。

例如,在上面的類中,我們可以編寫與實現IFoo的事情一起工作的算法,只知道該對象將能夠執行IFoo接口所具有的功能。所以我可以編寫一個在IFoo接口上調用方法的算法,然後任何實現IFoo接口的人都可以重用我的算法。

+0

不是作業:) – 2010-04-15 04:16:20

+0

@hmm我會對你說的。在我回答之前,我看了你過去詢問過的其他問題,看起來你不是那種類型的人:) – AaronLS 2010-04-15 04:18:46

+0

實際上,泛型對我來說很困惑,至於你什麼時候會使用它們,而且這種語法不是(雖然我對器具的猜測是正確的,但我想知道更多關於如何以及何時使用此器具的信息)。 – 2010-04-15 04:26:33

17

HostFactory是一個公共通用類(來自ServiceHostFactory衍生)與單個通用類型參數調用TApp,其中所提供的任何TApp必須實現IFoo接口(警告:該IWhatever圖案只是一個約定; IFoo是一個類,我想)。 HostFactory<TApp>型不是一種具體類型;它必須被進一步子類進行實例化 - 大概的東西像下面(雖然通用類也就夠了):

public class BarHostFactory : HostFactory<Bar> {} 
public class Bar : IFoo {...} 
+0

非常好的解釋。給予好評! – Kaili 2010-04-15 04:09:39

+0

感謝您解釋Marc! – 2010-04-15 04:36:47

2

它說HostFactory有一個通用型TApp,它從ServiceHostFactory繼承和where關鍵字信號是TApp是constrant。

在C#2.0中,您使用where reserved關鍵字來定義約束。在泛型類型參數後面跟隨派生冒號使用where關鍵字來向編譯器指示泛型類型參數實現特定接口。

http://msdn.microsoft.com/en-us/library/ms379564(VS.80).aspx

+2

(注意:'where'在泛型約束中具有其他含義而不僅僅是「實現一個特定的接口」 - 至少有4種其他用途(':struct',':class',':new()' ,':SomeBaseType') – 2010-04-15 04:12:38