<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                > 用父類的對象來調用子類的方法 > 對繼承來說,是在子類中定義方法,調用父類中的屬性。 多態:在父類中定義方法,然后在子類中創建對象來調用。 比如父類中有: 屬性:體重 行為:叫 子類中有貓、狗、羊。 那么在父類中創建對象時,就可以調用貓、狗、羊這三個子類來實現“叫”這個行為。 > 也就是:以父類的身份出現,但以子類的方式工作。 # 虛方法 多態使得派生類(子類)的實例可以直接賦值基類的對象,然后直接通過這個對象調用派生類的方法。 c#中類的多態性是通過在派生類(子類)中寫**基類**的虛方法來實現。 也就是: ``` 子類(實例)=> (虛方法)= > 父類(對象)=> 子類方法 ``` 在父類中用`virtual`來寫需方法,在子類中用`override`來重寫虛方法。 ``` using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 多態 { class Vehicle //定義父類名叫Vehicl { public string Name { get; set; } //定義屬性。但其實如果不定義為屬性,也是可以的,也可以直接定義為變量:public string Name; 也是可以的 public virtual void Move() // 用virtual來表示虛方法 { Console.WriteLine("{0}可以移動", Name); } } class Train:Vehicle //定義子類 火車 { public override void Move() // 用override來重寫虛方法 { Console.WriteLine("{0}可以在鐵軌上行駛", Name); //把默認的base方法替換掉 } } class Car:Vehicle // 定義子類 汽車 { public override void Move() { Console.WriteLine("{0}可以在道路上行駛", Name); } } class Program { static void Main(string[] args) // 在Main()中創建對象 { Vehicle v = new Vehicle(); // 先創建父類對象 Train t = new Train();//創建子類對象 Car c = new Car(); // 創建子類對象 Vehicle[] vs = { v, t, c }; // 創建父類的對象數組并賦值,這個集合名叫vs。 v.Name = "交通工具"; t.Name = "火車"; c.Name = "汽車"; vs[0].Move(); //第一個元素是 v,在基類中,所以默認調用基類方法 vs[1].Move(); //第二個元素是t,在派生類中,所以會自動調用派生類 Train 中的方法 vs[2].Move(); //第三個元素是c,在派生類中,所以會自動調用派生類Car中的方法 Console.Read(); } } } ``` # 抽象類和抽象方法 接上述多態。 可在父類中定義抽象方法`abstract class Vehicle`,也就是沒有中括號以及括號內的內容,然后在子類中重寫override 。 但要注意,此時如果在Program 中創建對象,那么抽象方法無法創建對象,這時候要通過將其具體化到子類中去實現。 ![](https://ws1.sinaimg.cn/large/006tNc79gy1frzxn6o7z2j30j00a5gn8.jpg) ![](https://ws1.sinaimg.cn/large/006tNc79gy1frzxq77vchj30nb07gdh3.jpg) ``` namespace 多態 { abstract class Vehicle //abstract寫前面,此時這個類也是抽象的 { public string Name { get; set; } public abstract void Move(); // abstract 為抽象方法,無需中括號以及其內部的內容。 } class Train:Vehicle { public override void Move() // 用override來重寫虛方法 { Console.WriteLine("{0}可以在鐵軌上行駛", Name); } } class Car:Vehicle { public override void Move() { Console.WriteLine("{0}可以在道路上行駛", Name); } } class Program { static void Main(string[] args) // 在Main()中創建對象 { Train t = new Train(); Car c = new Car(); Vehicle v = new Train(); //此時創建父類對象時,要直接用子類的屬性。 v.Name = "火車"; v.Move(); Console.Read(); //輸出的結果為“火車在軌道上行駛” } } } ``` # 接口 關鍵字:`interface` 實現:通過類 繼承接口 來實現。 比如:定義2 個接口(名叫Information、Information2) ``` interface Information { string Code{get; set;} string Name{get; set;} void ShowInfo(); //不允許寫修飾符 public } interface Information2 { string Code{get; set;} void ShowInfo(); } ``` 實現:通過類來實現 ``` public class JHInfo: Information, Information2 // 繼承接口的列表 { string code = ""; string Name = ""; public string Code //定義屬性 { get { return code;} set { code = value;} } public void ShowInfo() { console.writeline(Code + Name); } } ``` > 報錯:C#運行提示錯誤不實現接口成員 意思是:在接口中定義的所有元素,在后續要實現的類中,一旦繼承了,就必須全部再體現一遍。例如上述接口中定義了兩個屬性以及一個方法,那么在后續的實現類中,也必須定義兩個屬性以及一個方法。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看