2011-03-23 157 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