雖然存在於這個話題很多問題,我無法找到(還)一個令人滿意的解決方案:訪問派生類
是否有可能(如果是,怎麼樣?)來訪問派生類從基本的虛擬方法?
讓我們想象一下,我有以下類別:
public class parent_class
{
public virtual string common_method() {
dynamic child = /* something to access the derived class */ ;
if (child == null)
return typeof(parent_class).FullName;
else
return child.GetType().FullName;
}
}
public class child_class1 : parent_class {}
public class child_class2 : parent_class {}
public class child_class3 : parent_class {}
是否可以執行以下代碼(並得到正確的結果)?
parent_class p = new parent_class();
child_class1 c1 = new child_class1();
child_class2 c2 = new child_class2();
child_class3 c3 = new child_class3();
System.Console.WriteLine(p.common_method()); // result: 'parent_class'
System.Console.WriteLine(c1.common_method()); // result: 'child_class1'
System.Console.WriteLine(c2.common_method()); // result: 'child_class2'
System.Console.WriteLine(c3.common_method()); // result: 'child_class3'
編輯:閱讀評論和答覆後,我要補充以下幾點:
- 我有大約300種不同的「子類」,所以首要的是不是一種選擇
- 我不想打印派生類的名稱 - 這只是一個例子
- @Siamak Ferdos:我嘗試了
this
關鍵字,但它不知如何按我的意圖工作。
似乎覆蓋虛擬方法將是一條路。任何理由你不這樣做? – zneak
我完全不清楚你想要做什麼。爲了得到你想要的結果,你根本不需要'動態',或者甚至'common_method'都是虛擬的。只需'返回GetType()。FullName'就可以了。 (順便說一下,即使對於測試樣本,也遵循.NET命名約定很有用。) –
@zneak:這裏沒有必要這樣做...... OP可以在沒有任何虛擬方法的情況下得到他們想要的結果...... –