gpt4 book ai didi

c# - VS Designer 错误 : GenericArguments[0], 'X' on 'Y' 违反了类型参数 'Z' 的约束

转载 作者:太空狗 更新时间:2023-10-29 21:53:02 33 4
gpt4 key购买 nike

我正在尝试创建从“通用”基类继承的表单,其中该基类的通用参数具有必须实现我的接口(interface)之一的约束。

它编译并运行得很好。我的问题出在 Visual Studio 设计器上。在我重建项目之前,它会很好地打开表单,之后它会在尝试查看表单设计器时报告以下错误,直到我重新启动 Visual Studio 或删除基类中的自定义接口(interface)约束。

GenericArguments[0], 'InterfaceInBaseClassProblem.TestEntity', on 'InterfaceInBaseClassProblem.BaseWindowClass`1[EntityType]' violates the constraint of type 'EntityType'.

第一步:创建接口(interface)

namespace InterfaceInBaseClassProblem
{
public interface ITestInterface
{
void Func1();
}
}

第二步:创建一个实现接口(interface)的类

namespace InterfaceInBaseClassProblem
{
public class TestEntity : ITestInterface
{
public void Func1()
{
}
}
}

第 3 步:创建一个通用基类 Form,它需要一个通用参数,该参数被约束为需要实现我们创建的接口(interface)

using System.Windows.Forms;
namespace InterfaceInBaseClassProblem
{
public class BaseWindowClass<EntityType> : Form where EntityType : ITestInterface
{
}
}

第 4 步:现在创建一个新表单,它继承 self 们的通用基础表单并使用 TestEntity 类作为参数

namespace InterfaceInBaseClassProblem
{
public partial class Form1 : BaseWindowClass<TestEntity>
{
public Form1()
{
InitializeComponent();
}
}
}

第 5 步:保存您的项目并测试我试图解决或解决的以下行为:

a) Close Visual Studio
b) Open Visual Studio
c) Open the Form1 class to view its designer and confirm its working
d) Close the Form1 designer you just opened
e) Rebuild the project
f) Open the Form1 class to view the error I have reported.
g) Either restart Visual Studio, or comment out the "where EntityType : ITestInterface" constraint we included with step 3 and rebuild to see it start working again

附加说明:

  • 我在 VS2015 和 2017 中测试过,结果相同
  • 我在多台开发机器上测试过
  • 我对这个设计的需求是在基类和它将执行的各种附加功能/角色中,这些功能/角色需要一个通用的“EntityType”,并要求它可以执行我添加到我的自定义界面的操作。这些通用函数将由我声明从该基类继承的所有形式使用。

最佳答案

如果 Microsoft 看到了这一点,我会遇到类似的问题。在 VS2015 中确认。我有 4 种形式:

public class BaseForm : Form
{
public BaseForm() {...}
}

public class BaseSubForm<T> : Form where T : BaseForm
{
public SubForm(T f) {...}
public InitForm(T f) {...}
}

public partial class TestForm : BaseForm
{
TestSubForm sf;

public TestForm()
{
...
sf = new TestSubForm(this);
}
}

public partial class TestSubForm : BaseSubForm<TestForm>
{
public TestSubForm(TestForm f) : base(f)
{
InitializeComponent();
}
}

如果我构建它,它会运行,但是 TestSubForm不会在设计器中显示。但是,如果我从 BaseSubForm 的构造函数中删除参数...

...
public SubForm() {...}
...
sf = new TestSubForm();
...
public TestSubForm(TestForm f)
...

我可以重新启动 Visual Studio,构建,它会正常显示。我可以在 InitForm 中传递该参数,我的第二阶段构造函数,但令人恼火的是我需要 2 个构造函数。

设计师似乎讨厌类型类 Subclass : BaseClass<Generic>

关于c# - VS Designer 错误 : GenericArguments[0], 'X' on 'Y' 违反了类型参数 'Z' 的约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41931853/

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