接口-抽象,虚方法
1.父類對象需要實例化有意義就用虛方法實現多態,父類中只有抽象方法,就定義抽象類,接口也如此,規范一注
標準的方法接口
設計模式就是對對一套常用的設計規劃總結,對程序中出現的問題寫了解決方案,用子類返回給抽象父類
3序列化和反序列化方法 BinaryFormatter
static void Main(string[] args){//要將p這個對象 傳輸給對方電腦Person p = new Person();p.Name = "張三";p.Age = 19;p.Gender = '男';using (FileStream fsWrite = new FileStream(@"C:\Users\SpringRain\Desktop\111.txt", FileMode.OpenOrCreate, FileAccess.Write)){//開始序列化對象BinaryFormatter bf = new BinaryFormatter();bf.Serialize(fsWrite, p);}Console.WriteLine("序列化成功");Console.ReadKey();//接收對方發送過來的二進制 反序列化成對象Person p;using (FileStream fsRead = new FileStream(@"C:\Users\SpringRain\Desktop\111.txt", FileMode.OpenOrCreate, FileAccess.Read)){BinaryFormatter bf = new BinaryFormatter();p = (Person)bf.Deserialize(fsRead);}Console.WriteLine(p.Name);Console.WriteLine(p.Age);Console.WriteLine(p.Gender);Console.ReadKey();}}[Serializable]public class Person{private string _name;public string Name{get { return _name; }set { _name = value; }}private char _gender;public char Gender{get { return _gender; }set { _gender = value; }}private int _age;public int Age{get { return _age; }set { _age = value; }}} }
密封類不能被繼承,關鍵字sealed
接口是一種規范。
只要一個類繼承了一個接口,這個類就必須實現這個接口中所有的成員
為了多態。
接口不能被實例化。
也就是說,接口不能new(不能創建對象)
接口中的成員不能加“訪問修飾符”,接口中的成員訪問修飾符為public,不能修改。
(默認為public)
接口中的成員不能有任何實現(“光說不做”,只是定義了一組未實現的成員)。
接口中只能有方法、屬性、索引器、事件,不能有“字段”和構造函數。
接口與接口之間可以繼承,并且可以多繼承。接口中只能有方法
接口并不能去繼承一個類,而類可以繼承接口? (接口只能繼承于接口,而類既可以繼承接口,也可以繼承類)
實現接口的子類必須實現該接口的全部成員。
一個類可以同時繼承一個類并實現多個接口,如果一個子類同時繼承了父類A,并實現了接口IA,那么語法上A必須寫在IA的前面。
class MyClass:A,IA{},因為類是單繼承的。顯示實現接口的目的:解決方法的重名問題
什么時候顯示的去實現接口:
當繼承的借口中的方法和參數一摸一樣的時候,要是用顯示的實現接口,當一個抽象類實現接口的時候,需要子類去實現接口。
面向接口編程,接口使用例子
class?Program{static?void?Main(string[]?args){//麻雀會飛??鸚鵡會飛??鴕鳥不會飛?企鵝不會飛??直升飛機會飛//用多態來實現//需方法、抽象類、接口IFlyable?fly?=?new?Plane();//new?MaQue();//new?YingWu();fly.Fly();Console.ReadKey();}}public?class?Bird{public?double?Wings{get;set;}public?void?EatAndDrink(){Console.WriteLine("我會吃喝");}}public?class?MaQue?:?Bird,IFlyable{public?void?Fly(){Console.WriteLine("麻雀會飛");}}public?class?YingWu?:?Bird,?IFlyable,ISpeak{public?void?Fly(){Console.WriteLine("鸚鵡會飛");}public?void?Speak(){Console.WriteLine("鸚鵡可以學習人類說話");}}public?class?TuoBird?:?Bird{?}public?class?QQ?:?Bird{?}public?class?Plane?:?IFlyable{public?void?Fly(){Console.WriteLine("直升飛機轉動螺旋槳飛行");}}public?interface?IFlyable{void?Fly();}public?interface?ISpeak{void?Speak();} 4、顯示實現接口就是為了解決方法重名的問題
class?Program{static?void?Main(string[]?args){//顯示實現接口就是為了解決方法的重名問題IFlyable?fly?=?new?Bird();fly.Fly();Bird?bird?=?new?Bird();bird.Fly();Console.ReadKey();}}public?class?Bird?:?IFlyable{public?void?Fly(){Console.WriteLine("鳥飛會");}///?<summary>///?顯示實現接口///?</summary>void?IFlyable.Fly(){Console.WriteLine("我是接口的飛");}}public?interface?IFlyable{void?Fly();}
5.
什么時候用虛方法來實現多態? 什么使用用抽象類來實現多態? 什么時候用接口來實現多態? 在這幾個類抽象出來的父類必須有方法實現,不需實例化父類用抽象類,如果父類實例化用虛方法,接口 是針對子類有一組共同的行為使用接口
總結
- 上一篇: Web3 赋能音乐行业,能否创造更多价值
- 下一篇: S-LIME阅读笔记(有实验代码)