我可以這樣做嗎? (過於簡單化了,因爲它太複雜)C# - 繼承,覆蓋
abstract class A {
public string Print() {}
public static string DoPrint(A a, Type T) {
((T)a).Print(); // <-- This should call eg. A3.Print(), not A.Print()
}
}
class A1: A {
public new string Print() {}
}
class A2: A {
}
class A3: A {
public new string Print() {}
}
class Somewhere
{
A3 a3 = new A3();
a3.DoPrint();
}
我有很多類(A1,A2,A3等),其從基類繼承(A)
我試圖創建上面的A類中的DoPrint()函數。 可以這樣做嗎?
我想這
public static string DoPrint(A a) {
a.Print();
}
但它調用A.Print(),而不是A3.Print()
編輯: 「傳遞一個類型作爲參數」 改了稱呼從因爲每個人都是對的,我可以使用虛擬(謝謝!)。這個問題在別的地方撒了謊,與這個問題無關。
爲什麼你在'A1'等''Print'方法聲明中指定'new'關鍵字?如果是關閉編譯器警告,請將它們取出並考慮警告給出的建議。 –
你不需要傳遞類型。只需使Print方法在所有類中都是虛擬的並且可以工作。 –
爲什麼不讓'Print'成爲'virtual'方法?這就是'虛擬'的意義所在。 – Jon