gpt4 book ai didi

c# - Windows 窗体泛型继承

转载 作者:太空狗 更新时间:2023-10-30 00:30:48 25 4
gpt4 key购买 nike

我有这些类(class):

class Foo<T1, T2> : Form 
where T1, T2 : EventArgs

class MiddleGoo : Foo<X,Y>

class Goo : MiddleGoo

X,Y 只是从 EventArgs 派生的简单类。

我在设计器中看到 Goo,但我想像这样在 Foo 和 Goo 之间创建一个 Boo 类:

class Boo<T1, Y> : Foo<T1, Y>
where T1 : EventArgs

class MiddleGoo : Boo<X,Y>

class Goo : MiddleGoo

中间类的解决方法不起作用,有什么想法吗?

编辑:我的意思是 Y 和 X 是像 YEventArgs 和 XEventArgs 这样的类,我的问题是当我将 Y 定义为 T2 但仍然希望在 T1 中保持通用时,在设计器类 Boo 中看到。

EDIT2:我刚刚意识到我拼错了一些关于 Y 类的东西......

public class Foo<T1, T2> : Form
where T1 : EventArgs
where T2 : EventArgs
{
}

public class Boo<T1> : Foo<T1, MyEventArgs2>
where T1 : EventArgs
{
}

public class MiddleGoo : Boo<MyEventArgs1>
{
}

class Goo : MiddleGoo
{
}

public class MyEventArgs2 : EventArgs
{
}

public class MyEventArgs1 : EventArgs
{
}

需要说明的是,我只是在 Designer 中看不到 Boo...(我也看不到 MiddleGoo,但我不需要)

最佳答案

适用于 Visual Studio 版本 >= VS2015.1

VS2015.1 开始,Windows 窗体设计器可以毫无问题地显示具有通用基类的类。因此,较新版本的 VS 不再需要其他帖子中的解决方法,并且以下类将毫无问题地显示在设计器中。

所以有一个像这样的基本泛型类:

public class BaseForm<TModel,TService> : Form
{
public TModel Model {get;set;}
public TService Service {get; set;}
}

您可以在设计器中毫无问题地创建派生表单:

public class FooForm: BaseForm<Foo,FooService> 
{
}

旧版本的 Visual Studio

在旧版本的 Visual Studio 中,当设计器想要在设计器中托管您的表单时,它会尝试创建您的表单基类的实例,并且您的类必须具有非泛型基,以便设计器可以显示它。

所以你可以看到BaseForm<T>:Form可以在设计器中显示,但 CategoryForm:BaseForm<Category>无法在设计器中显示。作为这些情况下的解决方法,您应该创建一个 BaseCategoryForm:BaseForm<Category>然后 CategoryForm:BaseCategoryForm将显示在设计器中。

示例

假设这是接受 TModel 作为模型和 TService 作为服务的基类:

public class BaseForm<TModel,TService> : Form
{
public TModel Model {get;set;}
public TService Service {get; set;}
}

然后用这行代码以这种方式创建一个中间表单:

Public Class BaseFooForm: BaseForm<Foo, FooService>{ }

最终的形式是这样的:

public class FooForm: BaseFooForm
{
}

现在是决赛FooForm有设计师,你可以正常使用它。通过这种方式,您可以创建要在设计器中得到支持的类。

注意

此更新也适用于控件设计器。所以也在generic base class for WinForm UserControl对于 VS>= VS2015.1,您不再需要这样的解决方法.

关于c# - Windows 窗体泛型继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33112724/

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