正如標題所說的那樣,到底是那些.NET的知識點呢?
接下來就讓我帶著你們去了解這些知識點吧!
1.接口
2.索引器
3.FOREACH的本質
4.匿名內部類
5.運算符的重載
一.什麼是接口?接口的作用又是什麼呢?如果不是太清楚或者是其他什麼的,那就請在認真、完整的浏覽幾遍吧!我想對你以後應該有很大的幫助。
解析:接口是組件之間的協議,描述了組件對外提供的服務。從技術上講接口是一組包含了函數型方法的數據結構。通過這組數據結構,客戶代碼可以調用組件對象的功能。接口可以從父接口中繼承。接口的繼承首先是說明性繼承,不是實現性繼承,它的實現需要通過類或結構來實現;其次接口繼承可以是多繼承。
作用:
01.接口就是為了約束方法的格式(參數和返回值類型)而存在的
02.接口可以實現多繼承,彌補單繼承的缺陷。
03.接口可以看成是一個特殊的抽象類,通過反編譯看源碼可知
04.接口中方法不用訪問修飾符,因為CLR會自動添加,並且不能有方法體
05.如果一個類實現了某個接口,就得實現該接口中所有的方法
06.接口要謹慎使用,防止出現接口污染!
07.接口僅僅代表一種能力,實現該接口的類和接口沒有繼承關系
08.接口是用來實現的,類是用來繼承的。
09.其實很多時候,看似可以不用接口,因為接口就是一個方法的約定,
表明你這個類必須要有某些方法,但是不寫接口也可以有這些方法,用了接口,
就可以使用接口變量,統一調用,實現多態
1.創建接口並讓一個類去實現這個接口

public class Person:IFly
{
public string Say(string name)
{
return "人";
}
}
public class Plane:IFly
{
public string Say(string name)
{
Console.WriteLine("大飛機在天上飛啊");
return "飛翔著";
}
}
2.定義一個一接口IFly類型的數組實例化各個實現IFly接口的類
IFly[] ifly =
{
new Plane(),
new Person()
};
foreach (IFly item in ifly)
{
string name = item.Say("會飛的所有東西");
Console.WriteLine(name);
}
3.接口也可以繼承接口
public interface IPlay:IFly
{
void Play();
}
二.接下來再說說讓我們編碼更方便的索引器吧!
1.屬性的本質是方法,索引器的本質是屬性。(可能會更好了解索引器)
2.索引器
01.C#中的類成員可以是任意類型,包括數組和集合。當一個類包含了數組和集合成員時,索引器將大大簡化對數組或集合成員的存取操作。
02.定義索引器的方式與定義屬性有些類似,其一般形式如下:
[修飾符] 數據類型 this[索引類型 index]
{
get{//獲得屬性的代碼}
set{ //設置屬性的代碼}
}
03.索引器的本質還可說是類(看源碼)

04.創建索引器代碼
public class Student
{
private string[] name = new string[2];
public string this[int index]
{
get { return name[index];}
set { name[index]=value;}
}
}
static void Main(string[] args)
{
#region 02.索引器
Student stu = new Student();
stu[0] = "董澤文";
stu[1] = "張一銘";
Console.WriteLine(stu[0] + "\n" + stu[1]);
#region
三.你們都應該會特別感興趣的Foreach原理:
本質:實現了一個IEnumerable接口,
01.為什麼數組和集合可以使用foreach遍歷?
解析:因為數組和集合都實現了IEnumerable接口,該接口中只有一個方法,GetEnumerator()
02.數組是一種數據結構,它包含若干相同類型的變量。數組是使用類型聲明的:type[] arrayName;
03.數組類型是從抽象基類型 Array 派生的引用類型。由於此類型實現了 IEnumerable ,因此可以對 C# 中的所有數組使用 foreach 迭代。
04.面試題:
001.C#中能用foreach遍歷訪問的對象需要實現______接口或聲明______方法的類型。
解析:IEnumerable ,GetEnumerator()
05.實現IEnumerable接口的類MyConnection
public class MyConnection:IEnumerable
{
ArrayList list = new ArrayList();
public void AddList(object o)
{
list.Add(o);
}
public IEnumerator GetEnumerator()
{
return new MyIenumerator(list);
}
}
06.實現IEnumerator接口的類MyIEnumerator
public class MyIenumerator:IEnumerator
{
public ArrayList list = new ArrayList();
private int i = -1;
public MyIenumerator(ArrayList mylist)
{
list = mylist;
}
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()
{
throw new NotImplementedException();
}
}
07.實例化MyIEnumertor 即可用FOREACH來循環
MyConnection mycon = new MyConnection();
mycon.AddList("董澤文");
mycon.AddList("張一銘");
foreach (object item in mycon)
{
Console.WriteLine(item);
}
四.匿名內部類
02.匿名類在底層還會被CLR編譯成一個有名字的類
03.匿名類型提供了一種方便的方法,可用來將一組只讀屬性封裝到單個對象中,而無需首先顯式定義一個類型。 類型名由編譯器生成,並且不能在源代碼級使用。 每個屬性的類型由編譯器推斷。
可通過使用 new 運算符和對象初始值創建匿名類型
#region 04.匿名內部類
var num = 1;
var names= "1";
var falg= false;
var stu =new {name="董澤文",age=12 };
if (num==1&&names.Equals("1"))
{
num++;
names += "10";
falg = true;
}
Console.WriteLine(num + "\t" + names + "\t" + falg);
Console.WriteLine(stu.name + "\t" + stu.age);
#endregion
五.運算符重載
01.C# 允許用戶定義的類型通過使用 operator 關鍵字定義靜態成員函數來重載運算符。
02.重寫運算符方法的類
public class Personers
{
public string PName { get; set; }
public int PAge { get; set; }
//重寫了加法運算
public static int operator +(Personers p1,Personers p2)
{
return p1.PAge + p2.PAge;
}
//重寫了減法運算
public static int operator -(Personers p1, Personers p2)
{
return p1.PAge - p2.PAge;
}
//重寫了乘法運算
public static int operator *(Personers p1, Personers p2)
{
return p1.PAge * p2.PAge;
}
//重寫了除法運算
public static double operator /(Personers p1, Personers p2)
{
return p1.PAge / p2.PAge;
}
//重寫了恆等運算(必須與不等方法同時書寫)
public static bool operator ==(Personers p1, Personers p2)
{
return p1.PAge == p2.PAge;
}
//重寫了不等運算(必須與恆等方法同時書寫)
public static bool operator !=(Personers p1, Personers p2) { return p1.PAge != p2.PAge; } }
03.實例化
Personers p1 = new Personers();
Personers p2 = new Personers();
p1.PAge = 25;
p2.PAge = 12;
Console.WriteLine(p1 + p2);
Console.WriteLine(p1 - p2);
Console.WriteLine(p1 * p2);
Console.WriteLine(p1 / p2);
Console.WriteLine(p1 == p2);
目前學習的內容就到這了,如果覺得對你有幫助的話,就請等待我的更新吧!如果有什麼知識點還不足的,請多多的提點建議!