C#接口的概念和用法
1. 接口是一個引用類型,通過接口可以實現多重繼承。2. C#中接口不能有new、public、protected、internal、private等修飾符。
3. 接口中只能聲明抽象成員(所以不能直接對接口進行實例化(即不能使用new操作符聲明一個接口的實例對 象)),而不能聲明共有的域或者私有的成員變數。
4. 接口聲明不包括數據成員,只能包含方法、屬性、事件、索引等成員。
5. 接口名稱一般都以“I”作為首字母(當然不這樣聲明也可以),這也是接口和類的一個區別之一。
6. 接口成員的訪問級別是默認的(默認為public),所以在聲明時不能再為接口成員指定任何訪問修飾符,否則 編譯器會報錯。
7. 接口成員不能有static、abstract、override、vritual修飾符,使用new修飾符不會報錯,但會給出警告說不需要關鍵字new。
8. 在聲明接口成員的時候,不準為接口成員編寫具體的可執行代碼,也就是說,只要在對接口進行聲明時指明接口的成員名稱和參數就可以了。
9. 接口一旦被繼承,子類需要把接口中所有成員實例化(通過具體的可執行代碼實現接口抽象成員的操作)。
總結起來說,使用C#接口應注意幾個問題:
1、C#中的接口是獨立於類來定義的。這與 C++模型是對立的,在 C++中接口實際上就是抽象基類。
2、接口和類都可以繼承多個接口。
3、類可以繼承一個基類,接口根本不能繼承類。這種模型避免了 C++的多繼承問題,C++中不同基類中的實現可能出現衝突。因此也不再需要諸如虛擬繼承和顯式作用域這類複雜機制。C#的簡化接口模型有助於加快應用程式的開發。
4、一個接口定義一個只有抽象成員的引用類型。C#中一個接口實際所做的,僅僅只存在著方法標誌,但根本就沒有執行代碼。這就暗示了不能實例化一個接口,只能實例化一個派生自該接口的對象。
5、接口可以定義方法、屬性和索引。所以,對比一個類,接口的特殊性是:當定義一個類時,可以派生自多重接口,而你只能可以從僅有的一個類派生。
C#接口
C#接口代碼學習c#代碼參考
接口(C# 參考)
接口只包含只有方法,屬性,索引器(有參屬性),事件四種成員。方法的實現是在實現接口的類中完成的,如下面的示例所示:
interface ISampleInterface
{
void SampleMethod();
}
class ImplementationClass : ISampleInterface
{
// Explicit interface member implementation:
void ISampleInterface.SampleMethod()
{
// Method implementation.
}
static void Main()
{
// Declare an interface instance.
ISampleInterface obj = new ImplementationClass();
// Call the member.
obj.SampleMethod();
}
}
---------------------------------------------------------------------------------------------------------
備註:
接口可以是命名空間或類的成員,並且可以包含下列成員的簽名:
·方法 ·屬性 ·索引器事件
事件
一個接口可從一個或多個基接口繼承。當基類型列表包含基類和接口時,基類必須是列表中的第一項。
實現接口的類可以顯式實現該接口的成員。顯式實現的成員不能通過類實例訪問,而只能通過接口實例訪問。
---------------------------------------------------------------------------------------------------------
示例
下面的示例演示了接口實現。在此例中,接口 IPoint 包含屬性聲明,後者負責設定和獲取欄位的值。Point 類包含屬性實現。using System;
interface IPoint
{
int x { get ; set ; } //聲明屬性成員
int y { get ; set ; }
}
class Point : IPoint
{
private int _X; //聲明成員變數
private int _Y;
public Point(int x, int y) { _X = x ; _Y = y ; } //定義構造函式
public int x //定義屬性成員
{
get { return _X ; }
set { _X = value ; }
}
public int y //定義屬性成員
{
get { return _Y ; }
set { _Y = y ; }
}
}
class Test
{
private static void PrintPoint(IPoint p) //定義輸出函式
{
Console.WriteLine("x={0},y={1}", p.x, p.y);
}
public static void Main()
{
Point p = new Point(2, 3);
Console.Write("My Point is:");
PrintPoint(p);
}
}
輸出結果:
My Point is: x=2, y=3