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

时间:2013-02-16 02:56:04

标签: c# interface refactoring

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

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

有没有办法使用这些类,就像它们已经实现了接口一样。

3 个答案:

答案 0 :(得分:1)

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

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

public class AAdapter : A, IMyInterface
{
}

答案 1 :(得分:1)

不,你不能这样修改现有的课程。

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

interface IWithM
{
  void M();
}

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

答案 2 :(得分:1)

使用decorator pattern

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

您的界面:

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);

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

缺点是,你必须在你的程序集中使用你的版本,而不是他们的。