gpt4 book ai didi

c# - 将未知类型的对象传递给函数

转载 作者:行者123 更新时间:2023-11-30 21:54:06 27 4
gpt4 key购买 nike

所以这是我的代码:

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{

if (listBox1.SelectedItem.ToString()=="Light" && Form.ActiveForm.Name != "Light")
{
Light o = new Light();
o.Show();
o.listBox1.SelectedIndex = listBox1.SelectedIndex;
NeedsToClose = false;
this.Close();
}
else if(listBox1.SelectedItem.ToString() == "Acceleration"&& Form.ActiveForm.Name !="Acceleration")
{
Acceleration o = new Acceleration();
o.Show();
o.listBox1.SelectedIndex = listBox1.SelectedIndex;
NeedsToClose = false;
this.Close();
}

}

它有效,但如您所见,我在两种情况下都有这部分代码:

o.Show();
o.listBox1.SelectedIndex = listBox1.SelectedIndex;
NeedsToClose = false;
this.Close();

我想让它变成 function(void) ,将一个对象传递给它,然后得到一个结果。任何想法如何做到这一点?

这两种形式都派生自名为 Template 的形式,该形式派生自类 Form。

最佳答案

有两种方法可以让它工作 - 静态类型和动态类型。

以静态类型的方式,您将创建一个涵盖 LightAcceleration 形式之间的共性的接口(interface) - 具体来说,它们都有 listBox1。这将使 C# 在编译时检查是否存在所述共性。假设基类表单TemplatelistBox1,你可以这样做:

Template nextForm;
if (listBox1.SelectedItem.ToString()=="Light" && Form.ActiveForm.Name != "Light") {
nextForm = new Light();
} else if(listBox1.SelectedItem.ToString() == "Acceleration"&& Form.ActiveForm.Name !="Acceleration") {
nextForm = new Acceleration();
}
nextForm.Show();
nextForm.listBox1.SelectedIndex = listBox1.SelectedIndex;
NeedsToClose = false;
this.Close();

在动态类型的解决方案中,您让 C# 跳过检查,并理解如果公共(public)部分不存在,程序将在运行时失败。解决方案与上述相同,除了您使用关键字 dynamic 代替通用类型的名称:

dynamic nextForm;
... // the rest is the same

关于c# - 将未知类型的对象传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33435355/

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