如何使某些类实现接口,同时将这些类构建到程序集中

本文关键字:构建 程序集 集中 程序 实现 何使某 接口 | 更新日期: 2023-09-27 17:59:50

我的意思是,例如,有类A、类B和类C。A、B、C都有一个方法void M(),但它们都没有声明实现任何接口。

所以我给出了一个带有void M()约束的接口。但是类A、B、C是程序集中的类型。

是否有任何方法可以使用这些类,就好像它们已经实现了一个接口一样。

如何使某些类实现接口,同时将这些类构建到程序集中

不,您不能以这种方式修改现有的类。

您可以派生新的类,并说它们实现了新的接口。基类中的现有方法将被选为接口实现。

interface IWithM
{
  void M();
}
class MyA : A, IWithM
{
  // IWithM.M will be picked from A.M
}

不,没有办法做到这一点。

但是,您可以编写继承自A、B和C的适配器类并实现接口。

public class AAdapter : A, IMyInterface
{
}

使用装饰器模式。

您可以创建这些类的自己版本,然后装饰实现,而无需修改其他人拥有的程序集。

您的界面:

public interface IImplementsM()
{
  void M();
}
public class MyA : IImplementsM 
{
   private A _a;
   public MyA(A a){
     _a = a;
   }
   public void M(){
     _a.M();
   }
}

然后,在您的代码中,您可以使用自己的版本或Interface,而不是使用A

// some other class
public void DoSomething(IImplementsM implementsM)
{
 implementsM.M();
}

执行可能类似于:

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

优点是,您现在可以在自己的代码中使用约束。

Distadvantage,您必须在程序集中使用您的类版本,而不是他们的。