程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 初識C#接口,

初識C#接口,

編輯:關於.NET

初識C#接口,


C# 接口(Interface)

接口定義了所有類繼承接口時應遵循的語法合同。接口定義了語法合同 "是什麼" 部分,派生類定義了語法合同 "怎麼做" 部分。

接口定義了屬性、方法和事件,這些都是接口的成員。接口只包含了成員的聲明。成員的定義是派生類的責任。接口提供了派生類應遵循的標准結構。

抽象類在某種程度上與接口類似,但是,它們大多只是用在當只有少數方法由基類聲明由派生類實現時。

接口是引用類型的,類似於類,和抽象類的相似之處有三點:
       1、不能實例化;
       2、包含未實現的方法聲明;
       3、派生類必須實現未實現的方法,抽象類是抽象方法,接口則是所有成員(不僅是方法包括其他成員);

       另外,接口有如下特性:接口除了可以包含方法之外,還可以包含屬性、索引器、事件,而且這些成員都被定義為公有的。除此之外,不能包含任何其他的成員,例如:常量、域、構造函數、析構函數、靜態成員。一個類可以直接繼承多個接口,但只能直接繼承一個類(包括抽象類)。

C#接口的作用 

1.接口用於描述一組類的公共方法/公共屬性. 它不實現任何的方法或屬性,只是告訴繼承它的類《至少》要實現哪些功能,繼承它的類可以增加自己的方法.

2.使用接口可以使繼承它的類: 命名統一/規范,易於維護.比如: 兩個類 "狗"和"貓",如果它們都繼承了接口"動物",其中動物裡面有個方法Behavior(),那麼狗和貓必須得實現Behavior()方法,並且都命名為Behavior這樣就不會出現命名太雜亂的現象.如果命名不是Behavior(),接口會約束即不按接口約束命名編譯不會通過.

3.提供永遠的接口。 當類增加時,現有接口方法能夠滿足繼承類中的大多數方法,沒必要重新給新類設計一組方法,也節省了代碼,提高了開發效率

聲明接口

接口使用 interface 關鍵字聲明,它與類的聲明類似。接口聲明默認是 public 的。下面是一個接口聲明的實例:

//公共接口: "動物" 
public interface IAnimal
 {
        void Behavior(); //行為方法,描述各種動物的特性 
}
 
//類: 狗 
public class Dog : IAnimal
{
        public void Behavior()
        {
               //Console.Write("我晚上睡覺,白天活動");
                MessageBox.Show("我晚上睡覺,白天活動");
         }
 }
 
//類: 貓 
public class Cat : IAnimal
{
      public void Behavior()
      {
                //Console.Write("我白天睡覺,晚上活動");
                MessageBox.Show("我白天睡覺,晚上活動");
       }
 }
//簡單的應用: 
public static Main() 
{ 
       Dog myDog = new Dog(); 
       myDog.Behavior(); //輸出: "我晚上睡覺,白天活動" 
       Cat myCat = new Cat(); 
       myCat.Behavior(); //輸出: "我白天睡覺,晚上活動" 
}

以上調用不同的類的相同名方法,會輸出不同的東東,也就是說每個類裡面的同名方法完成的功能可以是完全不同的.

更進一步,不是用上面Main方法這樣一個一個調用類的方法,用多態性實現其調用.

看一下下面這個方法:

public void Behavior(IAnimal myIanimal)
{
            myIanimal.Behavior();
}

其參數是接口類型,任何繼承它的類都可以調用此方法,此方法能根據類的不同調用不同的類 中的方法. 也即能夠自己根據不同的類,完成不同的類的功能.

多態性代碼示例:

Dog myDog = new Dog();
Cat myCat = new Cat();
Behavior(myDog); //Behavior接受“狗”類實例 
Behavior(myCat); //Behavior接受“狗”類實例

這樣Behavior方法寫一次就能完成所有繼承它的類中的相同名方法的不同功能. 非常方便,同樣,由於“動物軟件”功能需求,需要再增加一個"龜"類:

//類: 龜 
public Tortoise: IAnimal 
{ 
       public void Behavior() 
       {
                  MessageBox.Show("我可以不活動,一睡就睡五千年!");
       } 
}

那麼也可以調用上面多態方法,所以說接口使方法具有較好擴展性. 如果繼承它的類很多的話,有多少好處是可想而知的!(出處:http://blog.csdn.net/yunhaic/article/details/6662843)

同樣,假設我們公司有兩種程序員:VB程序員,指的是用VB寫程序的程序員,用clsVBProgramer這個類表示;Delphi程序員指的是用Delphi寫程序的程序員,用clsDelphiProgramer這個類來表示。每個類都有一個WriteCode()方法。定義如下:

public class clsVBProgramer
{
    public void WriteCode()
    {
        //用VB語言寫代碼;
    }
}

public class clsDelphiProgramer
{
    public void WriteCode()
    {
        //用Delphi語言寫代碼;
    }
}

public class clsProject
{
    public void WritePrograme(clsVBProgramer programer)//用VB寫代碼
    {
        programer.WriteCode();
    }
    public void WritePrograme(clsDelphiProgramer programer)//重載方法,用Delphi寫代碼
    {
        programer.WriteCode();
    }
}

static void Main(string[] args)
{
    clsProject proj = new clsProject();
    //如果需要用VB寫代碼
    clsVBProgramer programer1 = new clsVBProgramer();
    proj.WritePrograme(programer1);
    //如果需要用Delphi寫代碼
    clsDelphiProgramer programer2 = new clsDelphiProgramer();
    proj.WritePrograme(programer2);
}

但是如果這時公司又來了一個C#程序員,我們怎麼改這段程序,使它能夠實現用C#寫程序的功能呢?我們需要增加一個新類clsCSharpProgramer,同時在此clsProject這個類中要再次重載WritePrograme(clsCSharpProgramer programer)方法。這下麻煩多了。如果還有C程序員,C++程序員,JAVA程序員呢。麻煩大了!

但是如果改用接口,就完全不一樣了:
首先聲明一個程序員接口:

    class Program
    {
        static void Main(string[] args)
        {
            clsProject proj = new clsProject();
            IProgramer programer;
            //如果需要用VB寫代碼
            programer = new clsVBProgramer();
            proj.WritePrograme(programer);
            //如果需要用Delphi寫代碼
            programer = new clsDelphiProgramer();
            proj.WritePrograme(programer);

        }
    }
    /// <summary>
    /// 聲明接口
    /// </summary>
    public interface IProgramer
    {
        void WriteCode();
    }
    //然後聲明類,並實現IProgramer接口:
    /// <summary>
    /// VB程序員實現的WriteCode方法
    /// </summary>
    public class clsVBProgramer : IProgramer
    {
        public void WriteCode()
        {
            //用VB語言寫代碼;
            Console.WriteLine("我是VB程序員實現的");
        }
    }
    /// <summary>
    /// Delphi程序員實現的WriteCode方法
    /// </summary>
    public class clsDelphiProgramer : IProgramer
    {
        public void WriteCode()
        {
            //用Delphi語言寫代碼;
            Console.WriteLine("我是Delphi程序員實現的");
        }
    }
    /// <summary>
    /// CSharp程序員實現的WriteCode方法
    /// </summary>
    public class clsCSharpProgramer : IProgramer
    {
        public void WriteCode()
        {
            //用Delphi語言寫代碼;
            Console.WriteLine("我是CSharp程序員實現的");
        }
    }
    /// <summary>
    /// 項目
    /// </summary>
    public class clsProject
    {
        public void WritePrograme(IProgramer programer)
        {
            programer.WriteCode();//寫代碼
        }
    }

這樣的如果再有程序員添加進來的話,我們只需把它們相關的類加進來,然後在main()中稍做修改就OK了。擴充性特別好!

另外我們如果把clsProject這個類封成一個組件,那麼當我們的用戶需要要擴充功能的時候,我們只需要在外部做很小的修改就能實現,可以說根本就用不著改動我們已經封好組件!這樣就很方便,很強大!(出處:http://blog.jobbole.com/85751/)

該文純粹屬於個人學習,有不足之處請多多指教!(文章部分內容摘自網絡,如果侵犯您的權益,請及時聯系我,謝謝。)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved