在Form构造函数中传递参数,winforms c#

时间:2012-10-05 20:59:35

标签: winforms constructor asp.net-3.5

我有一个以下的继承层次结构:

A类:表格
B类:A类

A类需要能够接受一个参数,这样我才能像这样创建B类实例:

ClassB mynewFrm = new ClassB(param);

如何在A类中定义这样的构造函数?

谢谢!

我在.net 3.5,c#

中使用Winforms

EDITED: A类和B类使用部分类定义为表单。 所以我想这会变成一个关于部分类和自定义(覆盖)构造函数的问题。

3 个答案:

答案 0 :(得分:7)

这是一个完整的演示示例,演示了所需的行为。

为了方便您的学习,我选择了一个字符串类型参数,您可以根据自己的情况进行调整。

要测试它,请创建一个新的 Visual Studio * C# *项目,并使用以下代码填写 program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace Stackoverflow
{

    public class ClassA : Form
    {
        public ClassA()
        {
            InitializeComponent();
        }

        public ClassA(string WindowTitleParameter)
        {
            InitializeComponent();
            this.Text = WindowTitleParameter;
            MessageBox.Show("Hi! I am ClassB constructor and I have 1 argument. Clic OK and look at next windows title");
        }

        private void InitializeComponent() // Usually, this method is located on ClassA.Designer.cs partial class definition
        {
            // ClassA initialization code goes here
        }

    }

    public class ClassB : ClassA
    {
        // The following defition will prevent ClassA's construtor with no arguments from being runned
        public ClassB(string WindowTitleParameter) : base(WindowTitleParameter) 
        {
            InitializeComponent();
            //this.Text = WindowTitleParameter;
            //MessageBox.Show("Hi! I am ClassB constructor and I have 1 argument. Clic OK and look at next windows title");
        }

        private void InitializeComponent() // Usually, this method is located on ClassA.Designer.cs partial class definition
        {
            // ClassB initialization code goes here
        }

    }

    static class Program
    {
        /// <summary> 
        /// The main entry point for the application. 
        /// </summary> 
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            // If you debug this code using StepInto, you will notice that contructor of ClassA (argumentless)
            // will run prior to contructor of classB (1 argument)

            Application.Run(new ClassB("Look at me!"));
        }
    }
}

答案 1 :(得分:0)

类的构造函数看起来像这样。

private Object _object1;

public ClassA(object object1)
{
    _object1 = object1;
}

答案 2 :(得分:0)

对于ClassA,您的构造函数看起来像

public ClassA(Object param)
{
    //...
}

ClassB看起来像

public ClassB(Object param) : base(param) 
{
    //...
}

其中base(param)实际上将调用接受该参数的ClassA构造函数。