我有一个抽象类CommandBase<T, X>
,我想拥有一个属性InnerCommand
。
但是由于InnerCommand
可能包含T和X的其他类型而不是包含它的命令,我该如何定义?
抽象类:
public abstract class CommandBase<T, X>
where T : CommandResultBase
where X : CommandBase<T, X>
{
public CommandBase<T, X> InnerCommand { get; set; }
(...)
}
在上面的示例中,InnerCommand
只接受T和X具有相同类型的实例,但我需要允许其他类型。
AddOrderitemCommand:
public class AddOrderitemCommand : CommandBase<AddOrderitemResult, AddOrderitemCommand>
{
(...)
}
可能包含WebserviceCommand:
public class GetMenuCommand : CommandBase<GetMenuResult,GetMenuCommand>
{
(...)
}
请告知允许此语法的语法。
答案 0 :(得分:7)
你基本上有三个选择:
dynamic
作为该属性的类型。我什么都做不了。object
作为该属性的类型。我什么都做不了。CommandBase<T, X>
实现它并将其用作属性的类型。这就是我要去的方式。答案 1 :(得分:6)
如果InnerCommand
与父T
/ X
无关,那么我建议使用不通用该类型的非通用InnerCommand
在签名中。这可能意味着添加非通用基类型(CommandBase
)或接口(ICommandBase
)。然后你可以简单地使用:
public ICommandBase InnerCommand {get;set;}
// note : CommandBase<T,X> : ICommandBase
或
public CommandBase InnerCommand {get;set;}
// note : CommandBase<T,X> : CommandBase