簡體   English   中英

如何在將這些類構建到程序集中時使某些類實現接口

[英]How to make some classes implement an interface while these classes are built into assembly

我的意思是,例如,有類A,類B和類C.A,B,C都有一個方法void M(),但它們都沒有聲明實現任何接口。

所以我給出了一個帶有void M()約束的接口。 但是A,B,C類是程序集中的類型。

有沒有辦法使用這些類,就好像它們已經實現了一個接口。

不,沒有辦法做到這一點。

但是,您可以編寫從A,B和C繼承的適配器類並實現該接口。

public class AAdapter : A, IMyInterface
{
}

不,您不能以這種方式修改現有的類。

您可以派生新類並說它們實現了新的接口。 基類中的現有方法將被選為接口實現。

interface IWithM
{
  void M();
}

class MyA : A, IWithM
{
  // IWithM.M will be picked from A.M
}

隨着裝飾圖案

您可以創建自己的這些類的版本,然后裝飾實現,而無需修改其他人擁有的程序集。

你的界面:

public interface IImplementsM()
{
  void M();
}

public class MyA : IImplementsM 
{
   private A _a;

   public MyA(A a){
     _a = a;
   }

   public void M(){
     _a.M();
   }

}

然后在您的代碼中而不是使用A您可以使用自己的版本或接口。

// some other class

public void DoSomething(IImplementsM implementsM)
{
 implementsM.M();
}

並執行可能是這樣的:

 var myA = new MyA(new A());
 DoSomething(myA);

優點,您可以在使用自己的代碼時使用約束。

不利的是,你必須在你的程序集中使用你的版本,而不是他們的。

暫無
暫無

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

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