sách gpt4 ai đã đi

c# - 返回参数中指定类型的变量?

In lại 作者:太空宇宙 更新时间:2023-11-03 20:19:16 28 4
mua khóa gpt4 Nike

我正在尝试创建一个类似于 Windows 窗体的类,它将具有多个新功能。它只是 Form 的“更好”版本,使我在这个程序上的工作更加轻松。这是我到目前为止所拥有的:

public class SuperForm : Form
{
protected abstract void OnSizeChanged(object sender, EventArgs e);

public SuperForm()
{
this.SizeChanged += OnSizeChanged;
}
}

不多,它只是确保每个 Form 都必须定义 OnSizeChanged,它会在大小更改时自动调用,但还会有更多。

接下来我需要的是一个方法,它将类/类型作为参数并初始化该类型的新对象,自动将其添加到 Controls,然后返回该对象。这是一个示例代码(不起作用),说明我希望它是什么样子:

public cls NewControl(ClassType cls) // This obviously doesn't work.
// I need it to return an object of type "cls" parameter.
{
cls newControl = new cls();
this.Controls.Add(newControl);
return newControl;
}

Tôi biết ClassType 不是有效类型,这就是我需要帮助的原因。

然后我基本上可以这样调用它:

Button b = this.NewControl(Button);

这将返回一个新按钮并将其添加到 this.Controls。当控件初始化时,我可能最终需要执行更多这些常见任务,所以这就是为什么我想在它自己的方法中使用它。

这在 C# 中可行吗?如果没有,是否有任何解决方法?一种方法是为每个继承自 Control 的类定义一个方法,如下所示:

public Button NewControl(Button b);
public TextBox NewControl(TextBox tb);
public ListBox NewControl(ListBox lb);

但这对我来说似乎不是一个有效的选择。

1 Câu trả lời

听起来你想做一个泛型方法,对类型参数有一些限制:

public T CreateAndAdd() where T : Control, new()
{
T newControl = new T();
Controls.Add(newControl);
return newControl;
}

这里的 T : Control 约束确保您正在创建一个控件,这样您就可以使用 Controls.Add. T : new() 约束确保类型参数具有公共(public)无参数构造函数,以便您可以调用 new T().

例如,要创建一个文本框,您可以这样调用该函数:

var tb = CreateAndAdd()

(顺便说一句,为了清楚起见,我已经重命名了该方法。)

关于c# - 返回参数中指定类型的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14628309/

28 4 0
太空宇宙
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com