2010-01-21 72 views
3

我在做這樣的事情:可以仿製藥嵌套在一個類定義

public abstract class FolderNode<TChildNode,TChildBusObj> : Node 
    where TChildNode : MappedNode<TChildBusObj>, new() 
    where TChildBusObj : new() 
{ 
.. 
} 

是否有自定義省略TChildBusObj的一種方式,但仍然是它能夠訪問的代碼?例如。我想能夠推斷泛型類型的泛型類型。我嘗試這樣做:

public abstract class FolderNode<TChildNode> : Node 
    where TChildNode : MappedNode<TChildBusObj>, new() 
{ 
.. 
} 

,但我得到這個編譯錯誤:

CS0246:(?是否缺少using指令或程序集引用)類型或命名空間名稱TChildBusObj「找不到

更新22/01

其實我已經決定我想這一點:

public class Folder<TChildNode, TBusObj> : MappedNode<TBusObj[]> 
    where TChildNode : MappedNode<TBusObj>, new() 

它會很高興地縮短這個:

public class Folder<MappedNode<TBusObj>, TBusObj> : MappedNode<TBusObj[]> 

但我不能,因爲我得到這個錯誤:

CS0081:類型參數聲明必須是一個標識符不是一個類型

我想你不能匿名類定義中的嵌套泛型

回答

0

泛型參數可以在類名定義或方法名定義中指定。

4

什麼會TChildBusObj參考,如果你不定義它是指?

0

   嗯,事情是,你沒有specied的TChildBusObj。
    編譯時,將根據需要使用的TChildBusObj將成爲參數。
    在第二個執行,還有的TChildBusObj是一個泛型參數沒有這樣的聲明,所以它假定TChildBusObj是一個類型,因爲你可能不具有後命名任何類,它會拋出異常。
    您在類定義中使用的每個泛型參數都必須聲明,所以您可以自由使用它。

0

爲什麼不

public class Folder<TBusObj> : MappedNode<TBusObj[]> 
{ 
    void Add(MappedNode<TBusObj> newChild) { ... } 
}