gpt4 book ai didi

c# - 如何调用派生类的方法?

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

简而言之

我希望能够调用一个方法,该方法接受一个类型为ObservableCollection<Base>的参数但我想用 ObservableCollection<Derived> 来调用它.它说它不能在两者之间转换。

更长

我想调用一个 WPF 窗口,其中是一个将绑定(bind)到 ObservableCollection 的列表框.我希望窗口显示两个不同类共有的一些基本信息。这些类(class)是 Derived1Derived2 , 并基于 BaseClass .如果类型刚好是 BaseClass,我可以调用该方法, 但我想传递一个列表。

所以我有两个集合:

ObservableCollection<Derived1> A;
ObservableCollection<Derived2> B;

并且希望能够使用上述两个集合调用类似下面的方法,这样我就不需要重复代码。

public void InitialiseWindow(ref ObservableCollection<BaseClass> List)
{
this.List=List;
}

但是它抛出一个错误:

cannot convert from 'ref System.Collections.ObjectModel.ObservableCollection<Derived1>' to 'ref System.Collections.ObjectModel.ObservableCollection<Base>'

虽然我在这里

是否有更好的方法来绑定(bind)在 Window 中所做更改的集合?将反射(reflect)来源,而不是使用 ref

解决方案

我修改了 Window 的构造函数以便它转换 IEnumerable给类型为 ObservableCollection 的公共(public)成员.由于窗口只会以模态方式显示,因此可以在窗口关闭后访问该成员。

public ObservableCollection<BaseClass> List;

public InitialiseWindow(IEnumerable<BaseClass> List)
{
InitializeComponent();
this.List=new ObservableCollection<BaseClass>(List);
}

最佳答案

如果您纯粹出于绑定(bind)目的公开它,传递 IEnumerable<BaseClass> 就足够了引用。数据绑定(bind)系统将自动检查实际实例,看它是否实现了INotifyCollectionChanged。 , 因此不需要将绑定(bind)属性显式键入为 ObservableCollection .

关于c# - 如何调用派生类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12503851/

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