我的意思是,例如,有A类,B类和C类.A,B,C都有一个方法void M(),但没有一个被声明实现任何接口。
所以我给出了一个带有void M()约束的接口。但是A,B,C类是程序集中的类型。
有没有办法使用这些类,就像它们已经实现了接口一样。
答案 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)
您可以创建这些类的自己版本,然后装饰实现,而无需修改其他人拥有的程序集。
您的界面:
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);
优点,您可以在使用自己的代码时使用约束。
缺点是,你必须在你的程序集中使用你的版本,而不是他们的。