winforms 在基窗体中使用T类型时出现继承问题

hi3rlvi2  于 2023-01-14  发布在  其他
关注(0)|答案(1)|浏览(134)
public partial class BaseListForm<TEntity> : RibbonForm where TEntity : CoreBaseEntity {}

我将TEntity赋予BaseListForm并从CoreBaseEntity中赋予 predicate ,

public partial class AddressTypeForm_List : BaseListForm<Si_AddressType> // Si_AddressType inherits from CoreBaseEntity {}

其他从BaseListForm继承的窗体看起来像这样

public class ShowListForms<TForm> where TForm : BaseListForm<CoreBaseEntity> {}

我有一个名为ShowListForms的类,用于特定用途,它也继承自BaseListForm。

ShowListForms<AddressTypeForm_List>.ShowListForm();

我在ShowListForm中使用窗体时遇到了这个问题。
错误;
错误CS0311类型"AddressType. AddressTypeForm_List"不能用作泛型类型或方法"ShowListForms"中的类型参数"TForm"。没有从"AddressType. AddressTypeForm_List"到"Models. Base. CoreBaseEntity〉"的隐式引用转换。
谢谢你的帮助。
如果我在第二个代码部分中使用BaseListForm而不是BaseListForm,问题就会解决,但我需要一个变通方案。<Si_AddressType>**in second code part the problem resolves but i need a workaround.

sqougxex

sqougxex1#

遗憾的是,如果你想让它工作,你必须在子类中的任何地方携带TEntity。
问题是public class ShowListForms<TForm> where TForm : BaseListForm<CoreBaseEntity> {}没有传递给BaseListForm的任何TEntity,因此它期望TForm是完全扩展BaseListForm<CoreBaseEntity>的东西
你可以这样做:

public class ShowListForms<TForm, TEntity> 
where TForm : BaseListForm<TEntity> 
where TEntity : CoreBaseEntity {}

不,当你叫它的时候会看起来更复杂一点,但是我认为它应该起作用。

ShowListForms<AddressTypeForm_List,Si_AddressType>.ShowListForm();

相关问题