4

次の継承階層があります。

クラス A : フォーム
クラス B : クラス A

クラス A は、次のようにクラス B のインスタンスを作成できるように、パラメーターを受け入れることができる必要があります。

ClassB mynewFrm = new ClassB(param);

クラス A でそのようなコンストラクターを定義するにはどうすればよいですか?

ありがとう!

私は.net 3.5、c#でWinformsを使用しています

編集: クラス A とクラス B は、部分クラスを使用してフォームとして定義されます。したがって、これは部分クラスとカスタム (オーバーライドされた) コンストラクターに関する質問に変わっていると思います。

4

3 に答える 3

9

必要な動作を示す完全なデモ サンプルを次に示します。

学習を容易にするために、ケースに合わせて調整できる文字列型パラメーターを選択しました。

テストするには、新しい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!"));
        }
    }
}
于 2012-10-05T22:03:32.370 に答える
0

クラスのコンストラクタは次のようになります。

private Object _object1;

public ClassA(object object1)
{
    _object1 = object1;
}
于 2012-10-05T21:02:04.770 に答える
0

ClassAコンストラクターは次のようになります

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

そして、ClassBそれは次のようになります

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

wherebase(param)は実際にClassAそのパラメーターを受け入れるコンストラクターを呼び出します。

于 2012-10-05T21:03:52.007 に答える