[英]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.