具有两种泛型类型的泛型类

时间:2014-10-20 10:11:14

标签: c# .net generics

我有一个“可选项”的泛型类,对列表很有用。现在我想要一个可选项包括其他可选项的列表。这是我的代码:

public interface ISelectableItem<T>
{
    bool IsSelected { get; set; }
    bool IsVisible { get; set; }
    string DisplayName { get; set; }
    T Value { get; set; }
    ObservableCollection<ISelectableItem<T>> SubItems { get; }
}

目前,SubItems集合与SelectableItem本身的类型相同。

问题是:我如何声明此界面,以便SubItems也是ISelectableItem,但T2类型,而不是T

1 个答案:

答案 0 :(得分:3)

将第二个泛型类型T2添加到类型定义中:

public interface ISelectableItem<T, T2>
{
    T Value { get; set; }
    ObservableCollection<ISelectableItem<T2>> SubItems { get; }
}

计划B将通过添加第二个界面层来区分子项和主项:

public interface ISelectableItem<T, T2> : ISelectableItem<T>
{
    ObservableCollection<ISelectableItem<T2>> SubItems { get; }
}

public interface ISelectableItem<T>
{
    bool IsSelected { get; set; }
    bool IsVisible { get; set; }
    string DisplayName { get; set; }
    T Value { get; set; }
}

这可以用作例如:

public class A : ISelectableItem<string> { ... }

public class B : ISelectableItem<string, string> { ... }

B b = new B();
b.SubItems.Add(new A());

甚至:

b.SubItems.Add(new B());