1

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

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

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

4

3 回答 3

1

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

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

public class AAdapter : A, IMyInterface
{
}
于 2013-02-16T03:00:17.617 回答
1

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

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

interface IWithM
{
  void M();
}

class MyA : A, IWithM
{
  // IWithM.M will be picked from A.M
}
于 2013-02-16T03:00:48.740 回答
1

装饰器模式

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

你的界面:

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

优点是,您现在可以在使用自己的代码时有一个约束。

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

于 2013-02-16T03:03:37.957 回答