我們可以在c#的方法中同時使用虛擬關鍵字和新關鍵字嗎?我們可以在c#的方法中同時使用虛擬關鍵字和新關鍵字嗎?
4
A
回答
7
是的。你會定義一個方法來隱藏父方法,並允許孩子覆蓋。這種行爲雖然可能有點奇怪。假設您有以下類:
public class A
{
public void DoSomething(){ Console.WriteLine("42!"); }
}
public class B : A
{
public virtual new void DoSomething(){ Console.WriteLine("Not 42!"); }
}
public class C : B
{
public override void DoSomething(){ Console.WriteLine("43!"); }
}
那麼你的執行將看起來像:
A a = new A();
A bAsA = new B();
A cAsA = new C();
B b = new B();
B cAsB = new C();
C c = new C();
a.DoSomething(); // 42!
b.DoSomething(); // Not 42!
bAsA.DoSomething(); // 42!
c.DoSomething(); // 43!
cAsB.DoSomething(); // 43!
cAsA.DoSomething(); // 42!
+0
因此,我們可以說「B」方法中的「new」關鍵字表示類似於「如果實例是由我的特定類型(B)創建的,而不是我的父類型(A)?這只是一個巧合... – funkymushroom 2010-09-13 17:31:51
+1
@funkymushroom不,它的意思是'只有在代碼與我的特定類型一起工作時才使用這個實現'注意bAsA說42 !,但實例是B類型/不同的是它是被訪問爲A類型的東西。 – eglasius 2010-09-13 17:44:09
1
是的,你可以結合兩者。
virtual
允許在派生類中
new
允許您隱藏的舊方法重載的方法。
兩者是互補的而不是矛盾的。
1
不要猶豫,自己嘗試一下,Visual Studio讓它變得簡單。
class Base {
public virtual void Method() { }
}
class Derived : Base {
public virtual new void Method() { }
}
相關問題
- 1. 在C++中使用虛擬關鍵字
- 2. 虛擬關鍵字
- 3. c中的虛擬關鍵字#
- 4. 我可以在c#.NET中強制使用'this'關鍵字嗎?
- 5. 在ANTLR語法中使用不同的關鍵字關鍵字
- 6. C# - 關鍵字的使用虛擬+倍率與新
- 7. C#虛擬&覆蓋關鍵字
- 8. 新關鍵字的真實用法隱藏虛擬方法實現? c#
- 9. 在TypeScript中,可以使用沒有「新」關鍵字的類嗎?
- 10. 虛擬關鍵字和庫提前
- 11. 我可以重載throw關鍵字嗎?
- 12. 我們可以用Java關鍵字命名一個類嗎?
- 13. 使用super關鍵字作爲方法名稱可以嗎?
- 14. 我可以在params關鍵字中使用lambda表達式嗎?
- 15. C#方法,使用params關鍵字
- 16. 使用C#中的新關鍵字
- 17. 缺少虛擬關鍵字的警告
- 18. 隱藏方法和「新」關鍵字
- 19. 可以用非明顯的方式使用unsigned關鍵字嗎?
- 20. 我可以在這種情況下使用`Static`關鍵字嗎?
- 21. 我們的關鍵字何時需要?
- 22. 在PHP中使用關鍵字和New關鍵字
- 23. 如何避免虛擬關鍵字
- 24. 偏差與虛擬關鍵字
- 25. 虛擬關鍵字內部組件
- 26. 使用新的關鍵字
- 27. C中的static關鍵字可以用來提高性能嗎?
- 28. 我們可以有一個虛擬的靜態方法嗎? (C++)
- 29. 在C++中使用C關鍵字
- 30. 我可以使用JSON4S hashCode方法作爲關鍵嗎?
當你試圖聲明這樣的方法時發生了什麼? – dtb 2010-09-13 17:14:37