線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2240
推到 Plurk!
推到 Facebook!

C# 如何呼叫上上層的method

尚未結案
will
中階會員


發表:176
回覆:135
積分:62
註冊:2002-04-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-23 07:17:02 IP:218.162.xxx.xxx 未訂閱
base 能呼叫上一層的method 如下面的範例, 執行結果為 I am Parent I am Child 如何在Child 的WhoAmI 內, 引用上上層的method呢而show 出 I am GrandParent I am Parent I am Child 呢 -------------------------------------------------------------------------- using System; class Test { static void Main() { Child aChild = new Child() ; aChild.WhoAmI(); Console.Read() ; } } class GrandParent { public virtual void WhoAmI() { Console.WriteLine("I am GrandParent"); } } class Parent : GrandParent { public virtual void WhoAmI() { Console.WriteLine("I am Parent"); } } class Child : Parent { public virtual void WhoAmI() { base.WhoAmI(); Console.WriteLine("I am Child"); } } 發表人 - will 於 2005/01/23 07:18:23
ATEIN
高階會員


發表:105
回覆:320
積分:125
註冊:2002-07-05

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-24 11:06:10 IP:203.204.xxx.xxx 未訂閱
用繼承方式即可解決。 當然命名空間要先 被 using such as : using 屬於T最上上代的命名空間 (繼承) T您的這代:T最上上代 (T您的這代)button1_click { T最上上代 上上上代methodObject=new T最上上代(); MsgBox(上上上代methodObject.上上上代的方法帶我去吃飯()); } DHM
------
ATEIN
will
中階會員


發表:176
回覆:135
積分:62
註冊:2002-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-24 19:25:25 IP:220.141.xxx.xxx 未訂閱
看不懂大哥您的意思 可否舉個用c#寫的範例程式呢?    
引言: 用繼承方式即可解決。 當然命名空間要先 被 using such as : using 屬於T最上上代的命名空間 (繼承) T您的這代:T最上上代 (T您的這代)button1_click { T最上上代 上上上代methodObject=new T最上上代(); MsgBox(上上上代methodObject.上上上代的方法帶我去吃飯()); } DHM
ATEIN
高階會員


發表:105
回覆:320
積分:125
註冊:2002-07-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-25 16:24:36 IP:203.204.xxx.xxx 未訂閱
class Test:GrandParent (您可以直接繼承:袓公即可,因為每代都有繼承關係)然後複寫回去各代的方法。 { static void Main() { Child aChild = new Child() ; aChild.WhoAmI(); Console.Read() ; } } DHM
------
ATEIN
ATEIN
高階會員


發表:105
回覆:320
積分:125
註冊:2002-07-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-01-25 16:25:09 IP:203.204.xxx.xxx 未訂閱
class Test:GrandParent (您可以直接繼承:袓父即可,因為每代都有繼承關係)然後複寫回去各代的方法。 { static void Main() { Child aChild = new Child() ; aChild.WhoAmI(); Console.Read() ; } } DHM
------
ATEIN
ATEIN
高階會員


發表:105
回覆:320
積分:125
註冊:2002-07-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-01-25 16:37:01 IP:203.204.xxx.xxx 未訂閱
引言: base 能呼叫上一層的method 如下面的範例, 執行結果為 I am Parent I am Child 如何在Child 的WhoAmI 內, 引用上上層的method呢而show 出 I am GrandParent I am Parent I am Child 呢 -------------------------------------------------------------------------- using System; class Test { static void Main() { Child aChild = new Child() ; aChild.WhoAmI(); Console.Read() ; } } class GrandParent { public virtual void WhoAmI() { Console.WriteLine("I am GrandParent"); } } class Parent : GrandParent { public virtual void WhoAmI() { Console.WriteLine("I am Parent"); } } class Child : Parent { public virtual void WhoAmI() { base.WhoAmI(); Console.WriteLine("I am Child"); } } 發表人 - will 於 2005/01/23 07:18:23
class Test:GrandParent (您可以直接繼承:袓父即可,因為每代都有繼承關係)然後複寫回去各代的方法。 { static void Main() { Child aChild = new Child() ; aChild.WhoAmI(); Console.Read() ; } } DHM
------
ATEIN
ATEIN
高階會員


發表:105
回覆:320
積分:125
註冊:2002-07-05

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-01-25 16:57:06 IP:203.204.xxx.xxx 未訂閱
寫錯了,更正,這才對 class Test:Child (您可以直接繼承:最小層子孫即可,因為每代都有繼承關係)然後複寫回去各代的方法。 { static void Main() { Child aChild = new Child() ; aChild.WhoAmI(); Console.Read() ; } } DHM
------
ATEIN
OsX
版主


發表:6
回覆:151
積分:111
註冊:2003-05-03

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-01-26 10:31:11 IP:60.248.xxx.xxx 未訂閱
引言: base 能呼叫上一層的method 如下面的範例, 執行結果為 I am Parent I am Child 如何在Child 的WhoAmI 內, 引用上上層的method呢而show 出 I am GrandParent I am Parent I am Child 呢 -------------------------------------------------------------------------- using System; class Test { static void Main() { Child aChild = new Child() ; aChild.WhoAmI(); Console.Read() ; } } class GrandParent { public virtual void WhoAmI() { Console.WriteLine("I am GrandParent"); } } class Parent : GrandParent { public virtual void WhoAmI() { Console.WriteLine("I am Parent"); } } class Child : Parent { public virtual void WhoAmI() { base.WhoAmI(); Console.WriteLine("I am Child"); } } 發表人 - will 於 2005/01/23 07:18:23
紅色為有誤的部份, 在子類別中成重新宣告為 virtual , 會隱藏父類別的方法, 這樣並不是覆載, 而是重新定義一個 WhoAmI 的 method, 只不過跟父類別同名. 正確的子類別裡的覆載修飾詞應該為 override. 正確的寫法為
        class GrandParent
        {
                public virtual void WhoAmI() 
                {
                        Console.WriteLine("I am GrandParent");
                }
        }            class Parent : GrandParent
        {
                public override void WhoAmI() 
                {
                        base.WhoAmI();
                        Console.WriteLine("I am Parent");
                }
        }            class Child : Parent
        {
                public override void WhoAmI() 
                {
                        base.WhoAmI();
                        Console.WriteLine("I am Child");
                }
        }    
ATEIN
高階會員


發表:105
回覆:320
積分:125
註冊:2002-07-05

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-01-26 12:39:11 IP:203.204.xxx.xxx 未訂閱
引言:
引言: base 能呼叫上一層的method 如下面的範例, 執行結果為 I am Parent I am Child 如何在Child 的WhoAmI 內, 引用上上層的method呢而show 出 I am GrandParent I am Parent I am Child 呢 -------------------------------------------------------------------------- using System; class Test { static void Main() { Child aChild = new Child() ; aChild.WhoAmI(); Console.Read() ; } } class GrandParent { public virtual void WhoAmI() { Console.WriteLine("I am GrandParent"); } } class Parent : GrandParent { public virtual void WhoAmI() { Console.WriteLine("I am Parent"); } } class Child : Parent { public virtual void WhoAmI() { base.WhoAmI(); Console.WriteLine("I am Child"); } } 發表人 - will 於 2005/01/23 07:18:23
紅色為有誤的部份, 在子類別中成重新宣告為 virtual , 會隱藏父類別的方法, 這樣並不是覆載, 而是重新定義一個 WhoAmI 的 method, 只不過跟父類別同名. 正確的子類別裡的覆載修飾詞應該為 override. 正確的寫法為
        class GrandParent
        {
                public virtual void WhoAmI() 
                {
                        Console.WriteLine("I am GrandParent");
                }
        }            class Parent : GrandParent
        {
                public override void WhoAmI() 
                {
                        base.WhoAmI();
                        Console.WriteLine("I am Parent");
                }
        }            class Child : Parent
        {
                public override void WhoAmI() 
                {
                        base.WhoAmI();
                        Console.WriteLine("I am Child");
                }
        }    
討論一下:應是複寫(override)才是...而不是複載(overload) 抱歉我無意冒犯!只是討論一下。 DHM
------
ATEIN
OsX
版主


發表:6
回覆:151
積分:111
註冊:2003-05-03

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-01-26 14:32:14 IP:60.248.xxx.xxx 未訂閱
呵呵, 沒關係.    一時手誤
系統時間:2024-05-18 0:00:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!