具有参数问题的新通用函数

时间:2010-07-29 04:26:37

标签: c# .net generics new-operator

HI, 我有一个通用函数,如下所示。它可用于通过调用

来显示表单

showForm(ch);

IT适用于第二个函数(没有参数的新函数),但是如果我想在构造函数中显示表单但是在第三个函数中使用参数(new with parameter),那么我就不能这样做。任何人都有一个想法怎么做?

       void showForm<T>(T frm)  where T :Form, new()
        {
            if (frm == null)
            {
                frm = new T();
            }
            frm.MdiParent = this;
            frm.Show();
        }


        //Works for this
        public frmChild2()
        {
            InitializeComponent();
            ChildToolStrip = toolStrip1;
           // toolStrip1.Visible = false;
        }

        //Does not Work for this
        public frmChild2(string title)
        {
            InitializeComponent();
            ChildToolStrip = toolStrip1;
            Text = title;
            // toolStrip1.Visible = false;
        }

2 个答案:

答案 0 :(得分:5)

使用Where T : new()告诉编译器T有一个public无参数构造函数。

第二种形式没有这样的构造函数。

根据你所展示的内容,没有必要在构造函数中设置标题(showForm方法如何知道要设置什么?)。

由于T也被限制为Form,因此您可以在实例化frm.Text =后设置Form

答案 1 :(得分:1)

new()保证T将具有不带参数的公共构造函数 - 如果您需要创建该类型的新实例,通常使用此约束。你不能直接传递任何东西。

检查

Passing arguments to C# generic new() of templated type