2011-03-23 154 views
1

我是一個新手,VB,和我有難以理解以下(遺留代碼)類的聲明實際上意味着:遞歸泛型類型聲明在VB.Net

Public MustInherit Class ModelBase(Of T As {ModelBase(Of T, TIdType), New}, TIdType) 

誰能解釋一下上面的?還有一個相關的ModelBaseCollection

Public MustInherit Class ModelBaseCollection(Of TCollection As {ModelBaseCollection(Of TCollection, TModel, TIdType), New}, TModel As {ModelBase(Of TModel, TIdType), New}, TIdType) 
Inherits Collection(Of TModel) 

我很難理解爲ModelBaseCollection類的需求爲ModelBase類是一個泛型類型。

+0

嗯......遞歸泛型。如果您瞭解C#,請看看這個:http://fernandof.wordpress.com/2007/09/23/recursive-generics-restrictions/ – 2011-03-23 19:19:21

+1

[Curiously Recurring Template Pattern and generics constraints(C#)]( http://stackoverflow.com/questions/1327568/curiously-recurring-template-pattern-and-generics-constraints-c) – 2011-03-23 19:43:59

回答

1

由於缺乏超過8個月的答案,所以參考好奇地重複出現的模板模式的意見已被正確地看作解決方案。

不過,這是可以明確描述:

Public MustInherit 

這是公開訪問,並且不能直接創建,但必須繼承使用;

Class ModelBase(Of 

它是普通類其中指定的類是:

T As {ModelBase(Of T, TIdType), New}, 

一個創建類繼承此類,和

TIdType) 

另一種類型。

沒有看到代碼的其餘部分,ModelBaseCollection是同樣的構造,能夠引用(本身的繼承類)的創造性版本和相應的ModelBase

+1

馬克,感謝您花時間回答。 +1,並被接受爲答案! – MagicAndi 2011-12-01 14:28:29