C#中的語法是什麼意思?在C#中這樣的語法是什麼意思?
public abstract class HostFactory<TApp> : ServiceHostFactory
where TApp : IFoo
C#中的語法是什麼意思?在C#中這樣的語法是什麼意思?
public abstract class HostFactory<TApp> : ServiceHostFactory
where TApp : IFoo
金潤會在這裏,我不知道這是否是因爲「的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接口的人都可以重用我的算法。
不是作業:) – 2010-04-15 04:16:20
@hmm我會對你說的。在我回答之前,我看了你過去詢問過的其他問題,看起來你不是那種類型的人:) – AaronLS 2010-04-15 04:18:46
實際上,泛型對我來說很困惑,至於你什麼時候會使用它們,而且這種語法不是(雖然我對器具的猜測是正確的,但我想知道更多關於如何以及何時使用此器具的信息)。 – 2010-04-15 04:26:33
HostFactory
是一個公共通用類(來自ServiceHostFactory
衍生)與單個通用類型參數調用TApp
,其中所提供的任何TApp
必須實現IFoo
接口(警告:該IWhatever
圖案只是一個約定; IFoo
能是一個類,我想)。 HostFactory<TApp>
型不是一種具體類型;它必須被進一步子類進行實例化 - 大概的東西像下面(雖然通用類也就夠了):
public class BarHostFactory : HostFactory<Bar> {}
public class Bar : IFoo {...}
非常好的解釋。給予好評! – Kaili 2010-04-15 04:09:39
感謝您解釋Marc! – 2010-04-15 04:36:47
這是一個抽象的通用類,從ServiceHostFactory繼承與約束泛型類型。
Constraints on Type Parameters (C# Programming Guide)
Darn擊敗了我:) – Kaili 2010-04-15 04:09:13
謝謝先生!很棒的鏈接:) – 2010-04-15 04:27:50
它說HostFactory
有一個通用型TApp
,它從ServiceHostFactory
繼承和where
關鍵字信號是TApp
是constrant。
在C#2.0中,您使用where reserved關鍵字來定義約束。在泛型類型參數後面跟隨派生冒號使用where關鍵字來向編譯器指示泛型類型參數實現特定接口。
http://msdn.microsoft.com/en-us/library/ms379564(VS.80).aspx
(注意:'where'在泛型約束中具有其他含義而不僅僅是「實現一個特定的接口」 - 至少有4種其他用途(':struct',':class',':new()' ,':SomeBaseType') – 2010-04-15 04:12:38
哪部分你不明白? – 2010-04-15 04:04:57
查看'.NET泛型'和'通用參數約束' – Gishu 2010-04-15 04:12:10