40-向下轉換 as 定義接口
阿新 • • 發佈:2018-01-31
多態 實現 ide sel brush 強制類型轉換 掌握 都是 ride
曾英-C#教學-40 向下轉換 as 定義接口
目錄
- 掌握基類轉換為派生類向下類型的轉換
- 掌握as運算符的用法
- 如何定義和使用接口
1/向下類型轉換
- 派生類轉換為基類即向上類型的轉換
- 基類轉換為派生類即向下類型的轉換
- 普通方法與虛方法的區別就是兩者在繼承中實現的區別.
- 普通方法在繼承中無法繼承調用
- 繼承方法這可以繼承調用
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _40_向上類型轉換 { class Program { static void Main(string[] args) { B b = new B(); //這裏經過轉換以後並不是完全的類型轉換 //這個步驟不能少 A a = b;//基類=派生類,這裏派生類b賦值給基類a這裏是向下類型的轉換 //這裏的a還不是完全的轉化成b類,但可以用b類中的虛方法 a.word();//這裏的a類已經是繼承b類的了 //輸出結果:B1,調用的是b類中的虛方法 /*--------------------------------------------------------------------*/ if (a is B)//這裏並沒有完全相等,但是這裏是返回的true { B b1 = (B)a; //強制轉換a,將具有基類與派生類屬的a完全轉化換成B類 b1.wordB();//經過強制類型轉換後的b1就可以調用B類中的方法了. } } } class A { public void wordA() { Console.WriteLine("A");} //基類虛方法 public virtual void word() { Console.WriteLine("A1"); } } //繼承 class B : A { //定義了與類名相同的方法 public void wordB() { Console.WriteLine("B"); } //重寫word虛方法,自己也是虛方法 public override void word() { Console.WriteLine("B1"); } } } //輸出:B1
2/as運算符
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _40_向上類型轉換 { class Program { static void Main(string[] args) { B b = new B(); A a = b; B b1 = a as B;//a轉化為B類的對象 //這是一個安全的轉化 //這裏如果不能轉化,則返回值是空,如果能轉化,則b1=a=new B(); if (b1 != null) b1.wordB(); //輸出結果:B } } class A { public void wordA() { Console.WriteLine("A");} //基類虛方法 public virtual void word() { Console.WriteLine("A1"); } } //繼承 class B : A { //定義了與類名相同的方法 public void wordB() { Console.WriteLine("B"); } //重寫word虛方法,自己也是虛方法 public override void word() { Console.WriteLine("B1"); } } }
3/接口
- 接口是為大家制定了一個規範.
3.1 接口的定義
- 命名的時候首字母要用大寫的I.
- 接口在添加新項中添加一個新的接口文檔
- 接口在定義的時候沒有方法體,只有方法的名稱
- 方法定義的都是公用的屬性或者方法
程序實例:
主函數: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _40_接口 { class Program { static void Main(string[] args) { //前面用到類,後面用到類的構造函數 //一個接口,多個方法的實現.多態的實現. IBankeAccount myAccount = new SaverAccount(); //接口的對象可以調用類中的普通方法,不需要強制轉換. myAccount.PayIn(1000); //取錢 myAccount.WithShowMyself(200); Console.WriteLine("余額:" + myAccount.Balance); } } //銀行賬戶類 //這裏要繼承接口 //這裏要使用並重寫接口 class SaverAccount : IBankeAccount { private decimal balance; //存錢方法的重寫 public void PayIn(decimal amount) {balance += amount;} //取錢的方法重寫 public bool WithShowMyself(decimal amount) { //設立安全點 if (balance >= amount) { balance -= amount; return true; } else { Console.WriteLine("余額不足"); return false; } } //顯示余額的屬性重寫 public decimal Balance { get { return balance;} } } } 接口定義: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _40_接口 { interface IBankeAccount { //存錢,接口中的方法沒有用到public,但是永遠都是公用的. void PayIn(decimal amount); //取錢,也沒有用到方法體 bool WithShowMyself(decimal amount); //余額 decimal Balance { get; }//只讀的屬性 } }
40-向下轉換 as 定義接口