1. 程式人生 > >C# 接口的學習

C# 接口的學習

ide 屬性 AI args ID 協議 inf AR img

接觸C#也有一段時間,對於接口的認知僅僅停留在認識階段,好像不寫出來,就不知道自己到底了解多少一樣,下面我把我對於C#接口的認知與大家分享一下,望大家批評指正。

1 定義

定義是一種用來定義程序的協議,用來描述可屬於任何類或結構的一組相關行為,由方法、屬性、事件和索引器4種成員類型的任何組合構成,但不包含字段。

2 特點

a. 通過接口可以實現多重繼承這就解決了C#類可以同時繼承多個基類的問題。類、結構、接口自身都可從多個接口繼承。

b. 接口可以包含方法、屬性、事件和索引器作為成員,但接口成員不需要任何修飾符,即不能有publicprotectedinternalprivate

newstaticabstractoverridevirtual等修飾符原因:接口裏面的內容需要繼承它的類或結構去實現因此其修飾符必須是publicC#接口成員默認是public特別註意一點,當子接口繼承父接口,2個接口中有相同的方法時,子接口要new關鍵字隱藏父接口中的方法。

c. 接口沒有構造函數,不能直接實例化接口。

d. 接口類似於抽象基類:繼承接口的任何非抽象類型必須實現接口中的所有成員。

e. 顯示接口成員實現。使用原因:如果類實現兩個接口,並且兩個接口有相同簽名成員,類中實現時兩個接口都會用該成員作為實現,那麽如果實現不同功能,就可能導致要給接口實現不正確或兩個都不正確,因此需要顯示地實現接口成員,即創建一個僅通過該接口調用並特定於該接口的成員。

f. 顯示接口成員實現不能包好訪問修飾符、abstractvirtualoverridestatic修飾符。

g. 顯示接口成員屬於接口成員,不屬於類成員。因此,不能用類對象直接訪問,只能通過接口對象來訪問。

3 例子

interface People

{
string Name { get; set; }
string Sex{ get; set; }
void Study();
}
interface MathTeacher: People //接口MathTeacher繼承接口People
{
void Teach();
}
interface EnglishTeacher: People//接口EnglishTeacher繼承接口People
{
void Teach();
}
interface Student : People//接口Student繼承接口People,
{
new void Study();//父子接口有相同方法,子接口用new隱藏父接口方法
}
class PerfectPeople : People, MathTeacher, EnglishTeacher, Student
//繼承自接口PeopleMathTeacher, EnglishTeacher, Student
{
string name = "";
string sex = "";
public string Name
{
get
{
return name;
}

set
{
name = value;
}
}

public string Sex
{
get
{
return sex;
}

set
{
sex = value;
}
}

public void Study()
{
Console.WriteLine(Name+ Sex +"可以自主學習");
} //實現Study方法
void MathTeacher.Teach()
{
Console.WriteLine(Name + Sex + "可以教數學");
}//顯示接口成員實現
void EnglishTeacher.Teach()
{
Console.WriteLine(Name + Sex + "可以教英語");
}//顯示接口成員實現
}
class Program
{
static void Main(string[] args)
{
PerfectPeople perfectPeople = new PerfectPeople();//實例化接口繼承類對象
Student student = perfectPeople;//使用接口繼承類實例化接口Student
student.Name = "肖奈";
student.Sex = "男";
student.Study();
MathTeacher mathTeacher = perfectPeople;//使用接口繼承類實例化接口MathTeacher
mathTeacher.Name = "葉淩天";
mathTeacher.Sex = "男";
mathTeacher.Teach();
EnglishTeacher englishTeacher = perfectPeople;//使用接口繼承類實例化接口EnglishTeacher
englishTeacher.Name = "貝微微";
englishTeacher.Sex = "女";
englishTeacher.Teach();
Console.ReadLine();
}
}

結果如下圖

技術分享圖片

C# 接口的學習