开发者

Can generics be nested in a class definition

I'm doing something like this:

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

Is there a way of omitting TChildBusObj from the definition, but still be able access it in the code? E.g. I want to be able to infer the generic type of a generic type. I tried this:

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

but I get this compile error:

CS0246: The type or namespace name 'TChildBusObj' could not be found (are you missing a using directive or an assembly reference?)

Update 22/01

I've actually determined I want this:

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

which it would be nice to shorten to this:

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

But I can't because I get this error:

CS0081: Type p开发者_如何学Carameter declaration must be an identifier not a type

I guess you cannot anonymize nested generic types in the class definition


What would TChildBusObj refer to if you don't define what it refers to?


Generic arguments can be specified either at the class name definition or at a method name definition.


  Well, the thing is that you didn't speciefed the TChildBusObj.
   When compiled, the TChildBusObj, to be used as you want, will become something of a parameter.
   In the second implementation, there's no such declaration of the TChildBusObj being a generic parameter, so it assumes that the TChildBusObj is a type, and as you probably don't have any class named after that, it will throw a exception.
   Every generic parameter you use in the class definition have to be declared, so you can use it freely.


why not just

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

?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜