5

我有一个抽象类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; }
    (...)
}

在上面的示例中,InnerCommand将只接受 T 和 X 具有相同类型的实例,但我需要允许其他类型。

一个 AddOrderitem 命令:

public class AddOrderitemCommand : CommandBase<AddOrderitemResult, AddOrderitemCommand>
{
    (...)
}  

可能包含一个 WebserviceCommand:

public class GetMenuCommand : CommandBase<GetMenuResult,GetMenuCommand>
{
    (...)
}

请告知允许这样做的语法。

4

2 回答 2

7

你基本上有三个选择:

  1. 用作dynamic该属性的类型。我什么都不会做。
  2. 用作object该属性的类型。我什么都不会做。
  3. 为命令创建非泛型基类或接口。CommandBase<T, X>实现它并将其用作属性的类型。这就是我要走的路。
于 2013-05-29T08:23:31.080 回答
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
于 2013-05-29T08:25:07.003 回答