gpt4 book ai didi

c# - 类型参数的类型层次结构?

转载 作者:行者123 更新时间:2023-11-30 22:40:03 25 4
gpt4 key购买 nike

想象一下我用来构建树结构的类布局:

class Treenodebase
{
Treenodebase Parent{get;set;}
IEnumerable<Treenodebase> Children {get;set;}
}
class Specialtreenode : Treenodebase
{
string SpecialProperty{get;set;}
public string ParentsSpecialProperty()
{
return Parent.SpecialProperty; //here I'd need casting?!
}
}
class Othertreenode : Treenodebase
{
string OtherProperty {get;set;}
}

我在整个程序中使用子类来构建单独的树。这意味着每个 Specialtreenode 只有一个 Specialtreenode 类型的父节点,以及一个 Specialtreenode 类型的子节点。

截图非常简单。基类有更多的属性(如 IsSelected 和 IsExpanded)和方法(想想“Ancestors”或“Siblings”等)和子类。

我可以在这里以某种方式利用类型参数来避免在每个子类中进行强制转换吗?或者这是否总是涉及我的子类而不是从基类继承?

最佳答案

你可以这样做:

class Treenodebase<T> where T : Treenodebase<T>
{
public T Parent{get;set;}
public IEnumerable<T> Children {get;set;}
}
class Specialtreenode : Treenodebase<Specialtreenode>
{
string SpecialProperty{get;set;}
public string ParentsSpecialProperty()
{
return Parent.SpecialProperty;
}
}

当然,这消除了非泛型 Treenodebase类型,这可能是好事也可能是坏事。如果你有很多实用方法并不真正关心你使用什么实现,你可能想要制作 Treenodebase<T>扩展非泛型基类或实现非泛型接口(interface)。另一方面,您可能会发现将所有实用程序方法也通用类型化会更容易。这取决于您如何在代码中使用树。

关于c# - 类型参数的类型层次结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5397064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com