首頁  >  文章  >  後端開發  >  .NET 中的三種介面實作方式

.NET 中的三種介面實作方式

巴扎黑
巴扎黑原創
2016-12-20 17:19:482342瀏覽

一般來說.NET提供了三種不同的介面實作方式,分別為隱式介面實作、明確介面實作、混合式介面實作。這三種方式各有各的特色。

首先來看隱式介面實現,這恐怕是我們使用最多的一種介面實現,因為隱匿介面實作是.NET的預設介面實現方式。下面讓我們來看看一個隱式介面實作的範例:

using System;
internal class MyClass
{
public void SomeMethod()
{
// 利用介面的方式宣告一個Myinplement物件
IMyInterface iObj = 利用介面的方式宣告一個Myinplement物件
IMyInterface iObple );
iObj.MethodA();
// 利用類別的方式宣告一個Myinplement物件
MyInplement obj = new MyInplement();
obj.MethodB();
}
}
public class Myplement region IMyInterface Members
///


/// 利用隱式介面實作方式實作介面中的方法
///

public void MethodA()
{
Console.WriteLine("a") ;
}
///
/// 利用隱式介面實作方式實作介面中的方法
///

public void MethodB()
{
Console.WriteLine("B") ;
}
#endregion
}
public interface IMyInterface
{
void MethodA();
void MethodB();
}

上面的程式碼很簡單,我們聲明了一個介面類別,然後利用介面類別。在實作介面的時候我們選擇了隱式介面實現,也就是在介面中定義的 方法簽章前加上修飾符來定義實作方法的簽名,例如public void MethodB()。 這種隱式介面實作用起來很簡單,但卻有一個缺點,就是它允許客戶可以直接呼叫實現類別中的方法,(即透過MyInplement obj = new MyInplement ()這樣的方式聲明物件)而不是透過介面呼叫實作類別中的方法(即透過的IMyInterface iObj = new MyInplement ();方式來宣告物件),無疑增加了程式碼的耦合性和違反了面向介面程式設計的原則。那怎麼樣 才能禁止客戶直接呼叫實作類別呢? 下面我們看的顯式介面實作就可以。

顯式介面實作是指實作類別在實作介面的方法時在方法的簽章上用"介面名.方法名稱」的樣式來定義方法名,同時在方法的簽章中不允許帶有修飾符,因為所有明確介面實作的方法全是private的,這是.NET為了禁止客戶直接呼叫實作類別而硬性規定的。下面我們來看看明確介面實作的範例:

using System;

internal class MyClass
{
public void SomeMethod()
{
// 利用介面的方式宣告一個Myinplement物件
IMyInter iOplejin = new MyOple
iObj.MethodA();
// 利用類別的方式宣告一個Myinplement對象,會報錯,因為MyImplement的MethodA方法是private的
MyInplement obj = new MyInplement();
}obj.MethodB();
public class MyInplement : IMyInterface
{
#region IMyInterface Members
///


/// 利用明確介面實作方式實作介面中的方法
///

face.
{
Console.WriteLine("a");
}
///
/// 利用明確介面實作方式實作介面中的方法
/// 會報錯,因為在明確介面實作時不允許帶有修飾符
///

public  void IMyInterface.MethodB()
{
Console.WriteLine("B");
}
#endregion
}
publicface interface ();
void MethodB();
}

上面的程式碼中有兩個地方會報錯,這是因為我們在報錯的地方違反了明確介面實現的限制。

最後讓我們來看混合式介面實現,混合式介面實作就是將隱式介面實作和顯式介面實作搭在一起使用,下面讓我們來看一個例子:

using System;

internal class MyClass

{

public void SomeMethod()

{

// 利用介面的方式宣告一個Myinplement物件
IMyInterface iObj = new MyInplement();
iObj.MethodA();
// 利用類別的方式宣告一個物件,不會用物件報錯,因為MyImplement的MethodA方法是public的
MyInplement obj = new MyInplement();
obj.MethodB();
}
}
public class MyInplement : IMyInterface
{
}
public class MyInplement : IMyInterface
{face]
/// 利用明確介面實作方式實作介面中的方法
///
void IMyInterface.MethodA()
{
Console.WriteLine("a");
}
///


/// 利用隱式介面實作方式實作介面中的方法
///

public  void MethodB()
{
Console.WriteLine("B");
}
#endregion
}
public interface IMyInterface
{
void MethodA();
void MethodB();
}

上面的程式碼 中我們將MehtodB的實作改為隱式介面實作,這樣MyImplement.Method的修飾符就是public的了,程式碼中就沒有錯了。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn