Общая функция, новая с параметрической проблемой - PullRequest
0 голосов
/ 29 июля 2010

Привет, у меня есть общая функция, как показано ниже.Его можно использовать для отображения формы, вызвав

showForm(ch);

Это работает для второй функции (новая без параметра), но если я хочу показать форму, но с параметром в конструкторекак и в третьей функции (новая с параметром), то я не смог этого сделать. У кого-нибудь есть идеи, как это сделать?

       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 ]

5 голосов
/ 29 июля 2010

с использованием Where T : new() сообщает компилятору, что T имеет конструктор public без аргументов.

Во второй форме такого конструктора нет.

Из того, что вы показываете, нет реальной необходимости устанавливать заголовок в конструкторе (как бы метод showForm даже знал, что установить?).

Поскольку T также ограничен, чтобы быть Form, вы можетеустановить frm.Text = после создания экземпляра Form.

1 голос
/ 29 июля 2010

new() гарантирует, что T будет иметь открытый конструктор, который не принимает аргументов - обычно вы используете это ограничение, если вам нужно будет создать новый экземпляр типа. Вы ничего не можете напрямую передать ему.

Проверьте это

Передача аргументов в C # универсальный new () шаблонного типа

...