我有一个方法,它接受SubForm对象并显示它。
public void subFormLauncher(object sender, SubForm f)
{
if (f == null)
{
f = new SubForm(this); // This line is problematic
f.Show();
}
else
{
if (!f.Visible)
{
f.Show();
}
f.Activate();
}
}
VS生气,因为SubForm是一个抽象类,我不小心实例化了它的一个实例(公平)。
public abstract class SubForm : Form
{
public SubForm(frmMain f) { }
public abstract void InitForm();
}
有没有办法在subFormLauncher的参数中指定我想要SubForm的子元素?类似的东西:
public void subFormLauncher(object sender, <T> extends SubForm f)
答案 0 :(得分:3)
public void subFormLauncher(object sender, SubForm f)
已经声明传入的对象必须是&#34; SubForm&#34;类型,问题是您的逻辑是尝试在此处创建子表单:
f = new SubForm(this); // This line is problematic
但是作为它的摘要,你不能把它当作新的。如果你删除它,并且在传递给你的方法时不允许子表格为null,则问题就解决了。
答案 1 :(得分:2)
整个appraoch的某些东西似乎“关闭”:
public void subFormLauncher(object sender, SubForm f)
让我想起了一个事件(对象发送者),但这看起来不像是一个事件。
您将表单作为参数传递也很奇怪,更不用说您正在做的工作了。如果你给它,你把它放到foregroind中,但如果没有你实例化它?
你很有可能在这里XY problem深处。
您无法指定要创建的确切类型。一种方法可能是在混合中添加一些通用:
public void subFormLauncher<T>(object sender, T f) where T : SubForm
{
if (f == null)
{
f = new T(this); // This line is problematic
f.Show();
}
else
{
if (!f.Visible)
{
f.Show();
}
f.Activate();
}
}
答案 2 :(得分:-2)
您可以使用界面并在方法调用中请求它。