gpt4 book ai didi

c# - 使用 T 的子类重载父属性的 BindingList

转载 作者:行者123 更新时间:2023-11-30 22:50:24 26 4
gpt4 key购买 nike

我对一个从最简单的角度看起来应该可行的想法遇到了一些麻烦。

我正在尝试重载 BindingList<T> 类型的属性在带有 BindingList 的子类中的 <subclasss T> .有一些方法可以解决这个问题,但似乎“最好”的方法是没有任何直接转换。我尝试了很多选项并找到了一些解决方案,但我对其中任何一个都不是特别满意。

有没有最好的方法?一个简单代码示例可能是最好的描述符在下面的这个例子中,我想派生一个只包含苹果的水果碗,但使用相同的属性名称来访问这个 BindingList<>苹果(在子类的情况下;在父类(super class)的情况下是普通水果)。

--------示例--------

class Fruit{}
class Apple: Fruit {}

class FruitBowl
{
protected BindingList<Fruit> m_aFruits;

public BindingList<Fruit> Fruits
{
get {return m_aFruits;}
}
}

class AppleBowl : FruitBowl
{
public BindingList<Apple> Fruits
{
get {return m_aFruits;}
}
}

最佳答案

您尝试执行的操作称为协方差/协方差。不幸的是,这在 C# 中的具体类型上不受支持(仅在 C# 4.0 的接口(interface)上可用)。鉴于 BindingList 的实现,不可能做你想做的事并只维护一个列表。

您可以尝试通过多种方式伪造它。解决此问题的一种方法是仅在子类上使用 IEnumerable 。在这种情况下,一个简单的 LINQ 查询就可以解决问题。

class AppleBowl : FruitBowl
{
public IEnumerableApple> TypedFruits
{
get {return base.Fruits.Cast<Apple>();}
}
}

关于c# - 使用 T 的子类重载父属性的 BindingList<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/624763/

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