我是C#的新手,並試圖理解類和「是」的關係。我一直試圖讓一段代碼工作,但我似乎無法做到。C#中的繼承/類#
它看起來像這樣:http://pastebin.com/cQDusptB
我有一個基類,哺乳動物,它應該能夠創建的實例,給哺乳動物作爲輸入的名稱。 我也有一堂課,狗,這是一種哺乳動物。人們應該能夠創建一個這樣的實例,就像哺乳動物一樣。
任何人都可以看到我的缺陷嗎?如果是的話,你能解釋一下我誤解/忘記了什麼嗎?
我是C#的新手,並試圖理解類和「是」的關係。我一直試圖讓一段代碼工作,但我似乎無法做到。C#中的繼承/類#
它看起來像這樣:http://pastebin.com/cQDusptB
我有一個基類,哺乳動物,它應該能夠創建的實例,給哺乳動物作爲輸入的名稱。 我也有一堂課,狗,這是一種哺乳動物。人們應該能夠創建一個這樣的實例,就像哺乳動物一樣。
任何人都可以看到我的缺陷嗎?如果是的話,你能解釋一下我誤解/忘記了什麼嗎?
這裏有幾個問題。首先,構造函數不能被標記爲虛擬或重寫。另一個問題是,您嘗試調用方法.Name
而沒有括號。修正後的版本如下所示:
public class Mammal
{
protected string _Name;
public virtual string Name()
{
return (this._Name + " - of type " + this.GetType());
}
public Mammal(string Name)
{
this._Name = Name;
}
}
public class Dog : Mammal
{
public Dog(string Name) : base(Name)
{
}
public override string Name()
{
return (base._Name + "Dog");
}
}
static void Main()
{
Mammal AnimalA = new Mammal("SubjectA");
Console.WriteLine("{0}", AnimalA.Name());
Mammal AnimalB = new Dog("SubjectB");
Console.WriteLine("{0}", AnimalB.Name());
Console.ReadLine();
}
謝謝! - 我瞭解變化! - 我想知道,是否有任何簡單的解決方法,如果我想要只需調用.Name而不使用()? – Treelink 2012-03-04 16:07:58
使用[properties](http://msdn.microsoft.com/en-us/library/x9fsa0sw(v = vs.100).aspx) – 2012-03-04 16:19:05
當發佈這樣的問題時,還會發布編譯器給您的錯誤消息。
任何人都可以看到我的缺陷嗎?
您有一個虛擬構造函數。
你能解釋一下我誤解/忘記了嗎?
構造被不是在C#繼承,因此它是沒有意義的它們標記爲任一虛擬或倍率。
狗的構造函數需要命名爲「狗」。你不能/不需要重寫「哺乳動物」。另外,Mammal的構造函數不應該是虛擬的。
public class Mammal
{
public Mammal(string name)
{
//....
}
}
public class Dog : Mammal {
public Dog(string name) : base(name)
{
}
}
您使用「base」關鍵字將參數傳遞給基類構造函數(請參閱上面的代碼)。
一定要拿起一本關於C#的好書來獲得正確的語言基礎知識。
謝謝。這是有道理的:) - 我有一本書,但我沒有完全得到這部分的解釋:( – Treelink 2012-03-04 16:09:30
構造函數不會被繼承/覆蓋。
公狗(字符串名稱):基地(名) {
}
現在,當狗構建它將通過指定的名稱傳遞給哺乳動物基類的構造函數。
你可以在你的問題中包含一個你正確的問題的小例子。不需要Pastebin。 – 2012-03-04 15:47:12