C#物件會員變數與method參數同名時
不要以為compiler會提醒你錯誤
因為它是合法的,
compiler會認為它是參數,除非是加入this.var來判別。
class c1 {
public static int x = 10;
void Add(int x) // Add(1), c1.x依然是10.
{
x = x;
}
}
在.Net 1.0它是不合法的,但.Net 1.1某時間後及.Net 2.0都是合法的
大家注意一下,以免像我一樣,debug到很慘的境界...
最近讀好多c#的基本物件繼承概念,
上述不同的scope能有同名的變數命名,稱為shadowing...
直覺上很奇怪,會懷疑為何c#要讓這樣的危險的關係存在?!
原來是因為在繼承時,我們常常不曉得parent有什麼會員變數,
儘管它們一般都是會private,但也有可能是被宣告為public 或static。
因此compiler允許這樣的方式存在同名。
至於method同名,也得用override來取代了!!
--
貫徹分享精神
我為人人,人人為我
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.248.89.46
※ 編輯: tomex 來自: 60.248.89.46 (05/12 16:36)
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章