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