→ juriolegend:((爺爺)this).method() ?? 02/09 00:05
→ Elly:直接base啦,繼承幾百層還是base.method name() 02/09 20:27
→ QQ29:base只是上一層阿..得不到爺爺 02/10 00:04
醒來很無聊就測試一下這個問題
順便跟最近中文變數/類別/方法問題應景一下 XD
接下來的程式碼在 VS2008 中正確無誤的跑過…
using System;
using System.Threading;
using System.Collections.Generic;
using System.Text;
namespace ExtendTest
{
class 爺爺
{
public void 我的名字()
{
Console.WriteLine("我是爺爺");
}
}
class 爸爸 : 爺爺
{
public void 我的名字()
{
Console.WriteLine("我是爸爸");
}
}
class 兒子 : 爸爸
{
public void 我的名字()
{
Console.WriteLine("我是兒子");
}
public void 我爸爸的名字()
{
base.我的名字();
((爸爸)this).我的名字();
}
public void 我爺爺的名字()
{
((爺爺)this).我的名字();
}
}
class Program
{
static void Main(string[] args)
{
兒子 老大 = new 兒子();
老大.我的名字();
老大.我爸爸的名字();
老大.我爺爺的名字();
Thread.Sleep(2000);
}
}
}
廢話不多說,結論是
juriolegend 板友的方法是對的,我第一個反應也是這個…
base 只能取到上一層,不能取到更上層(或是使用 base 有其他寫法?)
要用 base 的話,我只想到要在 class 爸爸 中 加上 我爸爸的名字
然後 base.我的名字,兒子才能用 base.我爸爸的名字… 去取得爺爺
不過這樣 method name 就不一樣了
另外,method 應該叫做我是誰 比較好 XD
取了之後就懶得改了… 測試而已
以上,太早起無聊一PO…
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.145.202.66
→ blestadsl:感覺中文變數用在教學~好清楚XD 02/11 08:24
→ chancewen:看起來好不習慣XD 02/11 08:38
→ scottzz:呵呵...蠻新鮮的感受 02/11 08:41
推 Elly:你把上上層給遮蔽了當然取不到呀 02/12 22:45
→ Elly:以讓最後一層能呼叫到,中間都不能有遮蔽或override 02/12 22:47
→ chrisQQ:對,編譯的時候他好像有說我隱藏了什麼 02/13 01:05
→ chrisQQ:那不知道不遮蔽的方法該怎麼寫@@? 或是有 keyword 02/13 01:06
→ chrisQQ:可以稍微提示我一下 > < 02/13 01:06