想拿高新就必须知道的知识
當別人拿著高工資而你卻還做著底層工作人員的時候是否應會覺得不服,那你應該該想想為什么了。
?
今天給大家帶來的知識:
(1)接口的理解
(2)索引器的理解
(3)foreach的本質
(4)匿名內部類
(5)運算符重載
?
一:接口的理解
接口是一種數據類型,它是可擴展性,利用接口可以實現多態;接口只能定義方法不能定義變量。
命名接口大都是以I開頭(Interface)
定義接口:
01.接口就是為了約束方法的格式(參數和返回值類型)而存在的 02.接口可以實現多繼承,彌補單繼承的缺陷。 03.接口可以看成是一個特殊的抽象類,通過反編譯看源碼可知 04.接口中方法不用訪問修飾符,因為CLR會自動添加,并且不能有方法體 05.如果一個類實現了某個接口,就得實現該接口中所有的方法 06.接口要謹慎使用,防止出現接口污染! 07.接口僅僅代表一種能力,實現該接口的類和接口沒有繼承關系 08.接口是用來實現的,類是用來繼承的。 09.其實很多時候,看似可以不用接口,因為接口就是一個方法的約定,表明你這個類必須要有某些方法,但是不寫接口也可以有這些方法,用了接口,就可以使用 接口變量,統一調用,實現多態關鍵字:interface
接口:接口 ?是繼承關系
子類:接口 是實現關系
抽象類和接口的區別:
當需要的各個對象之間存在父子類關系時,可以考慮使用抽象類,
當各個對象之間不存在繼承關系,只是有相同的能力時,而已考慮使用接口
接口的通俗理解:
01.飛機會飛,鳥會飛,他們都繼承了同一個接口“飛”;但是F22屬于飛機抽象類,鴿子屬于鳥抽象類。
02.就像鐵門木門都是門(抽象類),你想要個門我給不了(不能實例化),但我可以給你個具體的鐵門或木門(多態);而且只能是門,你不能說它是窗(單繼承);
? ? ? 一個門可以有鎖(接口)也可以有門鈴(多實現)。?門(抽象類)定義了你是什么,接口(鎖)規定了你能做什么(一個接口最好只能做一件事,你不能要求鎖也
能發出聲音?(接口污染))
例子:
//定義一個接口 namespace 接口 {public interface IFly{string Say(string msg);} } //定義一個Plane類 class Plane:IFly,IPlay //兩個接口是繼承關系{public string Say(string msg){Console.WriteLine("我是一只小飛機小呀小飛機");return "飛機阿";}public string Eat(string msg){return "我吃汽油";}}//定義一個Bird類 public class Bird:IFly,IPlay{public string Say(string msg){Console.WriteLine("我是一只小小鳥");return "小鳥!";}public string Eat(string msg){return "蟲子";}}
//實現 class Program{static void Main(string[] args){IFly[] flys = {new Bird(),new Plane(),};foreach(IFly fly in flys){Console.WriteLine( fly.Say("天氣不錯"));}Console.ReadLine();}}
接口是組件之間的協議,描述了組件對外提供的服務。從技術上講接口是一組包含了函數型方法的數據結構。通過這組數據結構,客戶代碼可以調用組件對象的功能。
接口可以從父接口中繼承。接口的繼承首先是說明性繼承,不是實現性繼承,它的實現需要通過類或結構來實現;其次接口繼承可以是多繼承。
由于接口允許多繼承,在可能發生二義性的地方可以采用全權名來避免。可以用類來實現接口。在類中定位接口成員的實現稱之為接口映射。類必須為接口的所有成員
提供具體的實現,包括接口中顯式定義的成員,以及接口從父接口中繼承而來的成員。同樣,在對接口的實現過程中可以采用顯式接口成員執行體來避免產生二義性。
派生類可以對基類已經實現的接口進行重實現。抽象類也可以實現接口,但接口成員必須映射到抽象類的抽象成員。抽象類的派生類如果是非抽象類,則必須通過方法
重載來實現接口成員。
?
二:索引器
語法:
?
[修飾符] 數據類型 this[索引類型 index]{get{//獲得屬性的代碼} set{ //設置屬性的代碼}}
例:public string this[int index]
this:當前類的實例
namespace 自定義索引器 {class Student{//定義一個集合private string[] name = new string[2];//定義一個索引器public string this[int index]{get { return name[index]; }set { name[index] = value; }}} }namespace 自定義索引器 {class Program{static void Main(string[] args){Student stu = new Student();stu[0] = "億";stu[1] = "二";Console.WriteLine(stu[0]);Console.WriteLine(stu[1]);Console.ReadLine();}} }
三:foreach本質
foreach原理:本質:集合實現了一個IEnumerable接口
例子:
namespace foreach本質 {public class MyIEnumertor:IEnumerator{ArrayList list = new ArrayList();public MyIEnumertor(ArrayList mylist){list = mylist;}private int i = -1;public object Current{get { return list[i]; }}public bool MoveNext(){bool flag = false;if(i<list.Count-1){i++;flag = true;}return flag;}public void Reset(){i = -1;}} }namespace foreach本質 {public class MyCollection : MyIEnumertor{ArrayList list = new ArrayList();public void Add(object o ){list.Add(o);}public MyIEnumertor GetEnumerator(){return new MyIEnumertor(list);}} }
namespace foreach本質 {class Program{static void Main(string[] args){MyCollection list = new MyCollection();list.Add("111");list.Add("222");foreach(object item in list){Console.WriteLine(item);}ArrayList list2 = new ArrayList();foreach(object item in list2){}Console.ReadLine();}} } 為什么數組和集合可以使用foreach遍歷? 解析:因為數組和集合都實現了IEnumerable接口,該接口中只有一個方法,GetEnumerator(),該方法返回類型為IEnumerator類型 02.數組類型是從抽象基類型 Array 派生的引用類型。由于此類型實現了 IEnumerable,因此可以對 C# 中的所有數組使用 foreach 迭代。 四:匿名內部類 語法: var stu = new {Name = "xxx"};
var stu = new {Name = "賈寶玉", Age = 4}; var tom = new {Name = "林黛玉", Age = 5}; 02.匿名類在底層還會被CLR編譯成一個有名字的類(看源碼) 03.匿名類型提供了一種方便的方法,可用來將一組只讀屬性封裝到單個對象中,而無需首先顯式定義一個類型。 類型名由編譯器生成,并且不能在源代碼級使用。 每個屬性的類型由編譯器推斷。 可通過使用 new 運算符和對象初始值創建匿名類型 五:運算符重載 C# 允許用戶定義的類型通過使用 operator 關鍵字定義靜態成員函數來重載運算符。 public static int operator+(work d1,work d2) {return d1.ID+d2.ID; } Work work1=new Work(){Name = "張三",ID = 1}; Work work2 = new Work() { Name = "張三2", ID = 1 }; Console.WriteLine(work1+work2);
補充知識點: 01.Java中==和Equals區別 02.C#中==和Equals區別
01.==比較的是地址? Equals比較的是存儲的值
02.C#中String類的==和Equals等價
?
?
如果對大家有幫助希望大家多多支持,期待下次的作品~
?
轉載于:https://www.cnblogs.com/ay-nzz/p/ay_ezz.html
總結
以上是生活随笔為你收集整理的想拿高新就必须知道的知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPF后台操作前台元素之查找对象
- 下一篇: 小图标文字对齐的终极解决方案