Gab*_*iël 5 c# generics properties
我有一个抽象类CommandBase<T, X>,我想拥有一个属性InnerCommand.
但是由于InnerCommandT和X可能有其他类型而不是包含它的命令,我该如何定义呢?
抽象类:
public abstract class CommandBase<T, X>
where T : CommandResultBase
where X : CommandBase<T, X>
{
public CommandBase<T, X> InnerCommand { get; set; }
(...)
}
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,InnerCommand只接受T和X具有相同类型的实例,但我需要允许其他类型.
AddOrderitemCommand:
public class AddOrderitemCommand : CommandBase<AddOrderitemResult, AddOrderitemCommand>
{
(...)
}
Run Code Online (Sandbox Code Playgroud)
可能包含WebserviceCommand:
public class GetMenuCommand : CommandBase<GetMenuResult,GetMenuCommand>
{
(...)
}
Run Code Online (Sandbox Code Playgroud)
请告知允许此语法的语法.
你基本上有三个选择:
dynamic作为属性的类型.我什么都做不了.object作为属性的类型.我什么都做不了.CommandBase<T, X>实现它,并用它作为属性的类型.这就是我要去的方式.如果InnerCommand与父T/ 不相关X,那么我建议使用InnerCommand不在签名中公布类型的非泛型.这可能意味着添加非泛型base-type(CommandBase)或interface(ICommandBase).然后你可以简单地使用:
public ICommandBase InnerCommand {get;set;}
// note : CommandBase<T,X> : ICommandBase
Run Code Online (Sandbox Code Playgroud)
要么
public CommandBase InnerCommand {get;set;}
// note : CommandBase<T,X> : CommandBase
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
689 次 |
| 最近记录: |