C#-概念-接口:接口


ylbtech-C#-概念-接口:接口
接口(硬件類接口)是指 同一計算機不同功能層之間通信規則稱為接口。
接口(軟件類接口)是指 對協定進行定義引用類型。其他類型實現接口,以保證它們支持某些操作。接口指定必須由類提供的成員或實現它的其他接口。與類相似,接口可以包含 方法、屬性、索引器和事件作為成員。
1.返回頂部
1、
中文名:接口
外文名:connector
含    義: 計算機不同功能層之間的通信規則
類    型:Java里的接口、C#中的接口等
分    類:硬件類接口、軟件類接口
學    科:計算機、IT
2、
2.返回頂部
1、

Java里的接口

Java里面 由於不允許多重繼承,所以如果要實現多個類的功能,則可以通過實現多個接口來實現
Java接口和Java抽象類代表的就是抽象類型,就是我們需要提出的抽象層的具體表現。OOP 面向對象的編程, 如果要提高程序的復用率,增加程序的可維護性,可擴展性就必須是面向接口的編程,面向抽象的編程,正確地使用接口、抽象類這些太有用的抽象類型做為java結構層次上的頂層
Java接口和Java抽象類有太多相似的地方,又有太多特別的地方,究竟在什么地方,才是它們的最佳位置呢?把它們比較一下,你就可以發現了。
1、Java接口和Java 抽象類最大的一個區別, 就在於Java抽象類可以提供某些方法的部分實現,而Java接口不可以,這大概就是Java抽象類唯一的優點吧,但這個優點非常有用。如果向一個抽象類里加入一個新的具體方法時,那么它所有的子類都一下子都得到了這個新方法,而Java接口做不到這一點,如果向一個Java接口里加入一個新方法,所有實現這個接口的類就無法成功通過編譯了,因為你必須讓每一個類都再實現這個方法才行,這顯然是Java接口的缺點。
2、一個抽象類的實現只能由這個抽象類的子類給出,也就是說,這個實現處在抽象類所定義出的繼承的等級結構中,而由於 Java語言的單繼承性,所以抽象類作為類型定義工具的效能大打折扣。在這一點上,Java接口的優勢就出來了,任何一個實現了一個Java接口所規定的方法的類都可以具有這個接口的類型,而一個類可以實現任意多個Java接口,從而這個類就有了多種類型。
3、從第2點不難看出,Java接口是定義混合類型的理想工具,混合類表明一個類不僅僅具有某個主類型的行為,而且具有其他的次要行為。
 

c#中的接口

C# 語言參考
接口(C# 參考)
定義: 接口是一種約束形式,其 中只包括成員定義,不包含成員實現的內容
目的:接口的 主要目的是為不相關的類提供通用的處理服務,由於C#中只允許樹形結構中的單繼承,即一個類只能繼承一個父類,所以接口是讓一個類具有兩個以上 基類的唯一方式。
聲明:接口聲明的方式與聲明類的方式相似, 但使用的關鍵字interface,而不是 class
接口只包含 方法、屬性、索引器和事件的簽名。方法的實現是在實現接口的類中完成的,如下面的示例所示:
interface ISampleInterface
{
//interfacemembers
void SampleMethod();
}
class Implementation Class:ISampleInterface
{
//實現接口成員。
void ISampleInterface.SampleMethod()
{
//方法實現。
Main();
}
static void Main()
{
//定義一個接口的實例變量obj。
ISampleInterface obj=new ImplementationClass();
//調用(obj)的成員方法。
Console.Write("ok");
Console.Read();
}
}
接口成員的定義:與類成員的定義相似,但是要注意:
不允許使用訪問修飾符(public,private,protected 或 internal), 所有的接口成員都必須是公共的
接口成員 不能包含代碼實體
接口成員 不能定義字段成員
接口成員不能用 關鍵字static,virtual,abstrac t或 sealed 來定義;
類型定義成員是禁止的
如果 要隱藏繼承了基接口的成員,可以用關鍵字new來定義它們,例如:
interface IMyBaseInterface
{
    void DoSomething();
}
interface IMyDerivedInterface:IMyBaseInterface
{
    new void DoSomething();
}
備注 :
接口可以是命名空間或類的成員,並且可以包含下列成員的簽名:
方法屬性 索引器事件一個接口可從一個或多個基接口繼承。
當基類型列表包含基類和接口時,基類必須是列表中的第一項。
實現接口的類可以顯式實現該接口的成員。顯式實現的成員不能通過類實例訪問,而只能通過接口實例訪問,例如:
有關顯式接口實現的更多詳細信息和代碼示例,請參見顯式接口實現(C# 編程指南)。
示例
下面的示例演示了接口實現。在此例中,接口IPoint 包含屬性聲明,后者負責設置和獲取字段的值。Point 類包含屬性實現。
//keyword_interface_2.cs
//Interface implementation
using System;
interface IPoint
{
    //Property signatures:
    int x{get; set;}
    int y{get; set;}
}
class Point : IPoint
{
    //Fields:
    private int _x;
    private int _y;
    //Constructor:
    public Point( int x, int y )
    {
        _x = x;
        _y = y;
    }
    //Property implementation:
    public int x
    {
        get { return _x; }
        set { _x = value; }
    }
    public int y
    {
        get { return _y; }
        set { _y = value; }
    }
}
class MainClass
{
    static void PrintPoint( IPoint p)
    {
        Console.WriteLine( "x={0},y={1}", p.x, p.y );
    }
    static void Main()
    {
        Point p = new Point( 2, 3 );
        Console.Write( "MyPoint:" );
        PrintPoint( p );
        //輸出MyPoint: x = 2,y = 3 
    }
}

PHP中的接口

<?php
interfacedemoInterface{
public function doIt();//聲明方法
}
class hello implements demoInterface{
public function doIt(){
echo "實現接口中的方法";
}
}
$demo=new hello();
$demo->doIt();
?>
 

VB.NET接口

在VB.NET的類里,實現一個接口的語句是:
implements接口名稱
例如,下面定義一個車(總稱)的接口,這里的車是各種車的總稱:
Public Interface ICar
Property color() As String
Property speed() As Long
Sub PrintInfo()
End Interface
然后在不同類型的“車”類里實現它:
Public Class A_Car
Implements ICar
Dim m_color As String, m_speed As Long
Public Property color() As String Implements ICar.color
Get
Return m_color
End Get
Set(ByVal Value As String)
m_color = Value
End Set
End Property
Protected Overr ides Sub Finalize()
MsgBox("I was deconstructed!")
End Sub
Public Sub New()
m_color = "Red"
m_speed = 210
MsgBox("I was constructed!")
End Sub
Public Property speed() As Long Implements ICar.speed
Get
Return m_speed
End Get
Set(ByVal Value As Long)
m_speed = speed
End Set
End Property
Public Sub PrintInfo() Implements ICar.PrintInfo
MsgBox("Color: " & m_color & vbNewLine & "Speed: " & m_speed, MsgBoxStyle.Information)
End Sub
End Class
在 Form 的 Load 事件中編寫:
Dim myCar As New A_Car
myCar.PrintInfo()
運行之后就創建了一個 A_Car 類的實例 myCar,然后出現兩個對話框,分別說明實例已經創建和汽車的信息。當 窗體 卸載時,這個類的實例 myCar 將自動銷毀,這時將出現一個“I was deconstructed!”的對話框。
聲明一個接口時,需要考慮以下幾點:
1.接口主體只限於對方法, 索引器以及屬性的聲明;
2.接口成員是隱式公開的,如果對其顯式指定訪問級別,就會出現 編譯器錯誤;
3.接口中不能包含字段, 構造函數常量等;
4.在接口中不能實現任何方法,屬性或者索引器;
5.在指定方法時,只需要給出返回類型,名稱和參數列表,然后分號結束。
 

面向對象的接口

在C++中,一個類被允許繼承多個類。但是在Java以后的語言不被允許。
這樣,如果想繼承多個類時便非常困難。所以開發方想出了新辦法:接口。
一個接口內,允許包含變量、 常量等一個類所包含的基本內容。但是,接口中的函數不允許設定代碼,也就意味着不能把程序入口放到接口里。由上可以理解到,接口是專門被繼承的。接口存在的意義也是被繼承。和C++里的 抽象類里的 純虛函數是相同的。不能被實例化。
定義接口的關鍵字是 interface,例如:
public interface MyInterface{
public void add(int x,int y);
public void volume(int x,int y,int z);
}
繼承接口的 關鍵字是implements,相當於繼承類的extends。
需要注意的是,當繼承一個接口時,接口里的所有函數必須全部被覆蓋。例如:
class Demo implements MyInterface{
public void add(int x,int y){
System.out.println(" "+(x+y));
}
public void volume(int x,int y,int z){
System.out.println(" "+(x*y*z));
}
public static void main(String args[]){
Demo d=new Demo();
d.add(10,20);
d.volume(10,10,10);
}
}
輸出結果:
30
1000
當想繼承多個類時,開發程序不允許,報錯。這樣就要用到接口。因為接口允許 多重繼承(,),而類不允許。所以就要用到接口。
2、
3.返回頂部
 
4.返回頂部
 
5.返回頂部
1、
2、
 
6.返回頂部
 
warn 作者:ylbtech
出處:http://ylbtech.cnblogs.com/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM