抽象類、介面、委託
阿新 • • 發佈:2018-11-19
抽象類:提供了部分功能的實現,不能被例項化的類,
除了不能被例項化和含有抽象方法,其餘使用和正常類使用一樣。 特點:不能被例項化 抽象類裡面可以包含抽象方法,這個方法子類必須實現,而且本類不能使用 子類要實現抽象方法必須使用關鍵字override。//抽象類 不能被例項化 public abstract class NPC { //抽象類裡面可以包含抽象方法:子類必須實現的方法,但是本類不能使用 public abstract void Say(); } public class Yihao : NPC { //要實現抽象方法必須要使用重寫的override public override void Say() { } } class Program { static void Main(string[] args) { NPC npc = new Yihao(); Console.ReadKey(); } }
委託:int是儲存整數的變數型別,float是儲存浮點數的變數型別 委託是儲存方法的變數型別 特點: public delegate void Func(int a); 引數型別和數量要一致 委託裡面可以儲存多個方法,當我們儲存多個方法的時候,會一次呼叫所有方法//抽象類 不能被例項化 public abstract class NPC { //抽象類裡面可以包含抽象方法:子類必須實現的方法,但是本類不能使用 public abstract void Say(); } //介面 接口裡面不能寫變數,只能寫方法,接口裡面的方法必須實現 public interface Enemy { //不能加public,因為介面中所有的方法都是public void GetHit(); } //介面是可以繼承的 public interface Boss : Enemy { void Skill(); } public class Yihao : NPC,Enemy,Boss { //要實現抽象方法必須要使用重寫的override public override void Say() { } //實現介面 public void GetHit() { } public void Skill() { } } class Program { static void Main(string[] args) { Yihao yh = new Yihao(); NPC npc = yh; //介面也可以實現多型 Boss boss = yh; boss.GetHit(); boss.Skill(); Console.ReadKey(); } }
public class Person { //建立一個委託型別 要求:返回值為void,有一個引數為int型別的方法 //public delegate void(int a) Func; //注意:這裡的a是隨意取的名稱,重要的引數的型別和數量int a //()裡面是寫的是儲存的方法名 public delegate void Func(int a); //通過剛才建立的委託型別,宣告一個委託 public Func func; public Person() { //Say(2); //讓func儲存Say方法 //第一種 //func = new Func(Say); //我們以後可以直接用委託呼叫方法 //第二種 func儲存了一個Say方法 func += Say; func += Eat; func(2); //委託裡面可以儲存多個方法,當我們儲存多個方法的時候,會一次呼叫所有方法 //func -=Eat; //委託解決的是回掉問題 } public void Say(int a) { Console.WriteLine("11111111111111"); } public void Eat(int b) { Console.WriteLine("22222222222222"); } } class Program { static void Main(string[] args) { Person person = new Person(); Console.ReadKey(); } }