我有一个班级
public class BaseHeaderFooterItem
{
public string Title { get; set; }
public string EnTitle { get; set; }
public HyperLink Link { get; set; }
public int Level { get; set; }
public HyperLink MobileLink { get; set; }
}
许多其他阶级继承他 我想在BaseHeaderFooterItem类中使用泛型列表 这将能够保存任何类型的继承类的列表。 像这样的东西:
public class BaseHeaderFooterItem
{
public string Title { get; set; }
public string EnTitle { get; set; }
public HyperLink Link { get; set; }
public int Level { get; set; }
public HyperLink MobileLink { get; set; }
public List<T> Descendants { get; set; }
}
我该怎么做?
答案 0 :(得分:2)
您可以尝试保留属性以保存基类型的子集合。
public class BaseHeaderFooterItem
{
public string Title { get; set; }
public string EnTitle { get; set; }
public HyperLink Link { get; set; }
public int Level { get; set; }
public HyperLink MobileLink { get; set; }
// here you can add instances of BaseHeaderFooterItem and any inherits type
public List<BaseHeaderFooterItem> Descendants { get; set; }
}
您可以添加任何继承自BaseHeaderFooterItem
的tpe,用于示例:
var list = new List<BaseHeaderFooterItem>();
list.Add(new BaseHeaderFooterItem() {
Title = "Test"
Descendants = new List<BaseHeaderFooterItem>()
{
new ChildHeaderFooterItem() { /* properties */}
}
});
或者,如果您需要为每个BaseHeaderFooterItem
指定一个特定类型,那么请尝试在声明中指定泛型。
public class BaseHeaderFooterItem<T>
where T : BaseHeaderFooterItem<T>
{
public string Title { get; set; }
public string EnTitle { get; set; }
public HyperLink Link { get; set; }
public int Level { get; set; }
public HyperLink MobileLink { get; set; }
// only T types
public List<T> Descendants { get; set; }
}
var list = new List<BaseHeaderFooterItem<ChildType>>();
list.Add(new BaseHeaderFooterItem() {
Title = "Test"
Descendants = new List<ChildType>()
{
new ChildHeaderFooterItem() { /* properties */}
}
});
答案 1 :(得分:0)
您可以使用此模式
public interface IBaseHeaderFooterItem
{
string Title { get; set; }
string EnTitle { get; set; }
public HyperLink Link { get; set; }
int Level { get; set; }
HyperLink MobileLink { get; set; }
}
public abstract class BaseHeaderFooterItem<T> : IBaseHeaderFooterItem
where T : IBaseHeaderFooterItem
{
public List<T> Descendants { get; set; }
public abstract string Title { get; set; }
public abstract string EnTitle { get; set; }
public abstract HyperLink Link { get; set; }
public abstract int Level { get; set; }
public abstract HyperLink MobileLink { get; set; }
}
然后你可以从BaseHeaderFooterItem<T>
继承而且T是约束,是一个实现IBaseHeaderFooterItem
并拥有所有这些属性的类。