作者tomex (tomex_ou)
看板C_Sharp
标题C#物件会员变数与method参数同名时
时间Thu May 12 16:34:03 2005
不要以为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)