我有一个“可选项”的泛型类,对列表很有用。现在我想要一个可选项包括其他可选项的列表。这是我的代码:
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
?
答案 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());