簡體   English   中英

C#:接口實現

[英]C#: Interface implementation

我在要遍歷的代碼庫中找到以下實現

Interface IOrder
{
GetSubmittedOrder();
CreateOrder();
GetExistingOrder();
}

Class Order : IOrder
{
BuildSpecialOrder();
AddSpecialOrderParameters();
IOrder.GetSubmittedOrder();
IOrder.CreateOrder();
IOrder.GetExistingOrder();
}

現在,當我們想從該Order對象訪問最后三個方法時,我們需要執行以下聲明

IOrder objOrder = new Order();

創建這樣的實現的原因(優勢)是什么? 這種做法是否有特定名稱?

注意:請讓我知道這是否更適合程序員。

它稱為顯式接口實現

如果實現的多個接口具有沖突的方法名,則用於區分特定接口的實現。

interface IOrder
{
  GetSubmittedOrder();
  CreateOrder();
  GetExistingOrder();
}

interface ISpecificOrder
{
  GetSubmittedOrder();
  CreateOrder();
  GetExistingOrder();
}

Class Order : IOrder, ISpecificOrder
{
  BuildSpecialOrder();
  AddSpecialOrderParameters();

  IOrder.GetSubmittedOrder();
  IOrder.CreateOrder();
  IOrder.GetExistingOrder();

  ISpecificOrder.GetSubmittedOrder();
  ISpecificOrder.CreateOrder();
  ISpecificOrder.GetExistingOrder();

}

我要說的是顯式接口實現的不正確用法。 這基本上意味着這些方法在公共類合同中不可見。 這就是為什么必須首先將對象轉換為接口類型的原因(使用隱式轉換)。 您也可以這樣做:

var order = (IOrder)order;
order.GetExistingOrder();

通常在類方法與接口方法沖突或類使用相同方法(但目的不同)實現兩個接口時使用。

請謹慎使用,因為它可能表明您的班級責任太大(應分為較小的班級)。

考慮適配器模式Wiki-適配器模式
與其他應用程序或應用程序的一部分進行通信時(以及許多其他要求),您不想綁定類型,因為它將在運行時決定,因此可以使用這種類型的對象聲明。 這將創建接口類型的對象,但將分配所需類型的內存(在切換情況下嵌套或由其他函數返回)。

 IOrder objOrder = new Order();

問題中提到的另一件事是關於接口的隱式和顯式實現。 兩者都可以在不同的情況下使用。 您可以從Google找到更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM