【问题标题】:C# Form inheritance and generic constraintsC# 表单继承和泛型约束
【发布时间】:2010-08-06 18:01:00
【问题描述】:

我正在使用 .NET Compact Framework,并且刚刚开始重构一些 UI 代码。我正在定义一个基本用户控件来封装通用功能,项目编译正常,但是当我尝试在设计模式下打开子用户控件时出现错误。

我的班级层次结构考虑到了this question。我的课是这样的:

//on the data layer..
interface IDataObject {}
class Foo: IDataObject {}

//on the UI layer i have
class BaseDataUserControl<TDataObject> : UserControl 
where TDataObject : IDataObject {}

class FooUserControl : BaseDataUserControl<Foo> {}

这是我得到的错误:

GenericArguments[0], 'Foo', on 'BaseDataUserControl`1[TDataObject]' 违反了类型 'TDataObject' 的约束

谁能告诉我为什么这不起作用?

【问题讨论】:

  • 从语言的角度来看,您的代码没有任何问题。
  • 是的,我知道,也许它特定于 VS =S 中的可视化编辑器
  • 你确定到处都是同一个 IDataObject 吗?将光标放在每个出现处,然后在 Visual Studio 中按 F12 以转到其定义。你每次都在同一个地方结束吗?正如@Steven 所说,发布的代码很好,所以单独它不会导致这个问题。
  • @Lasse V. Karlsen 我刚刚做了这个练习,是的,它是相同的 IDataObject =S

标签: c# generics inheritance forms constraints


【解决方案1】:

这一定是一个模棱两可的问题,编译器在编译 FooUserControl 时会看到 IDataObject 的不同定义。这很容易做到,System.Windows.Forms 命名空间已经有一个 IDataObject 接口。

选择一个不同的名称或输入完整的命名空间名称。

【讨论】:

  • 好的,我按照您的建议重命名了课程,但仍然无法正常工作,所以我只是重新启动了我的计算机(希望有随机的想法!),之后我设法让可视化编辑器显示我的用户控件 =), ...虽然可悲的是 =(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
相关资源
最近更新 更多