所以我只是試圖讓我的頭圍繞這個概念在這裏:C#定義子類時基類是如何工作的?
方案1
我有一個名爲的人一個基類,它有一個不帶參數的單一constrcutor(即默認構造函數)
這個類有2分保護遺產,我可以改變(他們是公開的)
現在我想創建一個子類(稱之爲學生),有一個額外的參數,所以我可以創建3個參數的構造函數(1 + 2從基類)
如果我創建一個子類的對象,我可以在3個參數傳遞 - 沒問題這工作(這可能是錯誤的方式做到這一點,但它的作品)
方案2
我有一個基類稱爲人,現在我有一個單一的構造函數接受2個參數,我沒有沒有參數的默認構造函數。
當我現在創建子類(學生),爲其構造函數創建另一個參數。
這個構造函數只有一個參數,就像我在情景1
做不過我可以用:base()
鏈接的基類,我不能從基類中添加第二個和第三個參數,但我需要通過在值與參數相反。
問題
如何我把自定義值在:base
類當我創建一個學生對象。因爲當我將它鏈接到子類構造函數中時,我正在傳入值。
基類
class Person
{
protected string Name;
protected int Age;
//public Person1(){}
public Person(string _name, int _age)
{
Name = _name;
Age = _age;
}
public void SayHello()
{
Console.WriteLine("Helllo World!");
Console.WriteLine($"My name is {Name} and I am {Age} years old");
}
}
子類
class Student : Person1
{
private int StudentId;
//I was hoping to put in new parameters in the base()
public Student(int _studentId) : base ("", 00)
{
//_name and _age do not exist
//Name = _name;
//Age = _age;
StudentId = _studentId;
}
}
Program.cs的
static void Main(string[] args)
{
var p1 = new Person1("John", 45);
p1.SayHello();
var student1 = new Student(123456);
}
但我不知道^ h ow添加在我的基類中設置的參數
編寫新的構造函數時,默認情況下編譯器不生成默認的無參數構造函數。所以除了其他構造函數外,爲了能夠調用'base()' –
所以你必須編寫無參數構造函數。所以,當我創建子類的對象時,如何定製這些參數?換句話說,如果在學生課程中沒有參數,我怎樣才能給student1一個不同的名字,然後student2呢? –
骯髒的方法是使用靜態字段來爲每個實例化您的數字。乾淨的方式是使用工廠模式,創建一個工廠來處理學生的初始化 –