Visual Studio Designer 可以显示继承泛型类型的类吗?
Posted
技术标签:
【中文标题】Visual Studio Designer 可以显示继承泛型类型的类吗?【英文标题】:Can visual studio designer show classes inheriting generic types? 【发布时间】:2011-10-16 04:10:15 【问题描述】:我正在尝试清理我们解决方案中的所有设计器错误并遇到以下错误:
无法显示此文件的设计器,因为其中没有任何类可以设计。设计器检查了文件中的以下类: DoubleAttributeTextBoxBase --- 无法加载基类“NumericAttributeTextBoxBase”。确保程序集已被引用并且所有项目都已构建。
这两个类都定义在同一个程序集中,所以我知道这不是参考问题。我想知道它是否与基类是通用的事实有关。有什么想法吗?
public class DoubleAttributeTextBoxBase : NumericAttributeTextBoxBase<double>
public class NumericAttributeTextBoxBase<T> : TextBox where T : IComparable, IComparable<T>
【问题讨论】:
我知道这可能看起来很愚蠢,但您是否检查过它们是否在同一个命名空间中?应用程序是否编译? 【参考方案1】:正在设计的类的基类必须是非抽象和非泛型的。使从泛型类继承的类可设计。解决方法是在中间插入一个普通的非泛型类:
public partial class DoubleAttributeTextBoxBase
: NumericAttributeTextBoxBaseOfDouble
public DoubleAttributeTextBoxBase()
InitializeComponent();
// Now DoubleAttributeTextBoxBase is designable.
public class NumericAttributeTextBoxBaseOfDouble
: NumericAttributeTextBoxBase<double>
为了尽可能简单,您甚至可以将非泛型类与您要设计的类放在同一个文件中。只需确保将其放在类之后(就像我在上面所做的那样),因为设计者希望文件中的第一个类是正在设计的类。
【讨论】:
非泛型基类需要有无参数构造函数,没有它对我不起作用。引入构造函数后需要重建。【参考方案2】:我不知道有什么解决方案,自从 C# 2.0 出来以来,这一直是 Visual Studio 的一个严重限制。我唯一能说的就是在运行时将该控件添加到页面,然后至少你可以让你的设计器回来做其他所有事情。
来自msdn:
您的组件或控件不能是泛型类型,也称为模板类型或参数化类型。设计环境不支持泛型。
http://msdn.microsoft.com/en-us/library/ms171843.aspx
【讨论】:
以上是关于Visual Studio Designer 可以显示继承泛型类型的类吗?的主要内容,如果未能解决你的问题,请参考以下文章
为什么在Visual Studio编码的UI测试中编辑UIMap.designer.cs文件不好?
在Visual Studio Designer中找不到自定义字体的C#文件
c# Using Settings under visual studio 2012
尝试在Visual Studio 2017中查看“应用程序属性”页面时出现NotImplementedException