c#接口

1、接口的概念及聲明

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

那麼接口具有哪些特點呢?

·接口類似於抽象基類:繼承接口的任何非抽象類型都必須實現接口的所有成員(說明:如類A繼承接口B,那麼A中必須實現B中定義的屬性,方法等)。

·不能直接實例化接口

·接口可以包含事件、索引器、方法和屬性

·接口不包含方法的實現

·類和接口可以從多個接口繼承

·接口自身可以繼承多個接口

在聲明接口時除了Interface和接口名稱是必須的,其他都是可選項。另可使用new、public、protected、intenal和private等修飾符實現接口,但接口成員必須是公共的。

2、接口的實現與繼承

聲明實現接口的類時,需要在基類列表中包含類所實現的接口的名稱。

下面舉個小例子來探討下:

using System;
using System.Collections.Generic;
using System.Text;

namespace _
{
interface ImyInterface
{
/// <summary>
/// 編號(可讀可寫)
/// </summary>
string ID
{
get;
set;
}
/// <summary>
/// 姓名(可讀可寫)
/// </summary>
string Name
{
get;
set;
}
/// <summary>
/// 顯示定義的編號和姓名
/// </summary>
void ShowInfo();
}
class Program:ImyInterface//繼承自接口
{
string id = "";
string name = "";
/// <summary>
/// 編號
/// </summary>
public string ID
{
get
{
return id;
}
set
{
id = value;
}
}
/// <summary>
/// 姓名
/// </summary>
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
/// <summary>
/// 顯示定義的編號和姓名
/// </summary>
public void ShowInfo()
{
Console.WriteLine("編號\t 姓名");
Console.WriteLine(ID + "\t " + Name);
}
static void Main(string[] args)
{
Program program = new Program(); //實例化Program類對象
ImyInterface imyinterface = program; //使用派生類對象實例化接口ImyInterface
imyinterface.ID = "TM"; //爲派生類中的ID屬性賦值
imyinterface.Name = "C# 2.0從入門到應用開發"; //爲派生類中的Name屬性賦值
imyinterface.ShowInfo(); //調用派生類中方法顯示定義的屬性值
}
}
}

上面的這個例子是一個簡單的一個類繼承一個接口,如要實現接口類中對應的成員必須是公共的、非靜態的,並且與接口成員具有相同的名稱和簽名。並且接口的實例化不能像類那樣Program program = new Program();其中上述程序中紅色部分即爲接口的實例化(使用派生類對象實例化接口)。

單一繼承時這樣的,那麼多重繼承呢?OK,我們來看下個例子:

using System;
using System.Collections.Generic;
using System.Text;

namespace _
{
interface IPeople
{
/// <summary>
/// 姓名
/// </summary>
string Name
{
get;
set;
}
/// <summary>
/// 性別
/// </summary>
string Sex
{
get;
set;
}
}
interface ITeacher:IPeople //繼承公共接口
{
/// <summary>
/// 教學方法
/// </summary>
void teach();
}
interface IStudent:IPeople //繼承公共接口
{
/// <summary>
/// 學習方法
/// </summary>
void study();
}
class Program:IPeople,ITeacher,IStudent//多接口繼承
{
string name = "";
string sex = "";
/// <summary>
/// 姓名
/// </summary>
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
/// <summary>
/// 性別
/// </summary>
public string Sex
{
get
{
return sex;
}
set
{
sex = value;
}
}
/// <summary>
/// 教學方法
/// </summary>
public void teach()
{
Console.WriteLine(Name + " " + Sex + " 教師");
}
/// <summary>
/// 學習方法
/// </summary>
public void study()
{
Console.WriteLine(Name + " " + Sex + " 學生");
}
static void Main(string[] args)
{
Program program = new Program(); //實例化類對象
ITeacher iteacher = program; //使用派生類對象實例化接口ITeacher
iteacher.Name = "TM";
iteacher.Sex = "男";
iteacher.teach();
IStudent istudent = program; //使用派生類對象實例化接口IStudent
istudent.Name = "C#";
istudent.Sex = "男";
istudent.study();
}
}
}

上述的多重繼承中說明了,在派生類中必須實現所繼承的接口中的所有方法。OK,單一繼承和多重繼承都有了瞭解之後,是不是沒有其他的需要了解的呢?試想一下,如果在一個類A繼承自接口B和C,並且在B和C中包含具有相同簽名的成員,那麼在類中實現該成員將導致兩個接口都使用該成員作爲他們的實現,然而,如果兩個接口成員實現不同的功能,那麼將會導致一個接口的成員實現不正確或兩個接口的成員實現都不正確,這個時候我們應該如何處理呢?我們可以顯示的實現接口成員,即創建一個僅通過接口調用並且特定於該接口的類成員。

下面也是一個通過一個實例來說明

using System;
using System.Collections.Generic;
using System.Text;

namespace _
{
interface ImyInterface1
{
/// <summary>
/// 求和方法
/// </summary>
/// <returns>加法運算的和</returns>
int Add();
}
interface ImyInterface2
{
/// <summary>
/// 求和方法
/// </summary>
/// <returns>加法運算的和</returns>
int Add();
}
class myClass : ImyInterface1, ImyInterface2 //繼承接口
{
/// <summary>
/// 求和方法
/// </summary>
/// <returns>加法運算的和</returns>
int ImyInterface1.Add() //顯式接口成員實現
{
int x = 3;
int y = 5;
return x + y;
}
/// <summary>
/// 求和方法
/// </summary>
/// <returns>加法運算的和</returns>
int ImyInterface2.Add() //顯式接口成員實現
{
int x = 3;
int y = 5;
int z = 7;
return x + y + z;
}
}
class Program
{
static void Main(string[] args)
{
myClass myclass = new myClass(); //實例化接口繼承類的對象
ImyInterface1 imyinterface1 = myclass; //使用接口繼承類的對象實例化接口
Console.WriteLine(imyinterface1.Add()); //使用接口對象調用接口中方法
ImyInterface2 imyinterface2 = myclass; //使用接口繼承類的對象實例化接口
Console.WriteLine(imyinterface2.Add()); //使用接口對象調用接口中方法
}
}
}

上面的實例中在Myclass類中,通過兩個顯示接口成員的方法分別實現了兩個接口中的Add方法,在實例化不同的接口後,調用相應的方法實現輸出結果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章