我有以下繼承層次:在窗體構造函數傳遞參數,的WinForms C#
A類:表
B類:A類
A類需要能夠接受一個參數,從而我可以創建B類的這樣的實例:
ClassB mynewFrm = new ClassB(param);
如何定義A級這樣的構造?
謝謝!
我使用的Winforms在.NET 3.5,C#
EDITED: A類和B類被定義爲的形式,使用部分類。 所以我想這是一個關於部分類和自定義(overriden)構造函數的問題。
我有以下繼承層次:在窗體構造函數傳遞參數,的WinForms C#
A類:表
B類:A類
A類需要能夠接受一個參數,從而我可以創建B類的這樣的實例:
ClassB mynewFrm = new ClassB(param);
如何定義A級這樣的構造?
謝謝!
我使用的Winforms在.NET 3.5,C#
EDITED: A類和B類被定義爲的形式,使用部分類。 所以我想這是一個關於部分類和自定義(overriden)構造函數的問題。
類的構造函數看起來像這樣。
private Object _object1;
public ClassA(object object1)
{
_object1 = object1;
}
對於ClassA
你的構造看起來像
public ClassA(Object param)
{
//...
}
和ClassB
它看起來像
public ClassB(Object param) : base(param)
{
//...
}
其中base(param)
實際上將調用ClassA
構造函數接受參數。
這裏是一個完整的演示樣本,展示了所需的行爲。
爲了方便您的學習,我選擇了一個字符串類型參數,以適應您的情況。
爲了測試它,創建一個新的的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!"));
}
}
}
A類需要能夠接受的參數,而不是類B.不需要在構造函數中的某個時刻調用InitializeComponent()例程? – sarsnake
當我實現上面的構造函數,它抱怨說''ClassA'不包含一個構造函數,它採用'0'參數' – sarsnake
嗨sarname。我剛剛完成了一個代碼修訂,它允許您在ClassA或ClassB上使用相同的參數。我建議你使用調試器的STEP-INTO功能來更好地瞭解代碼流。希望能幫助到你 –