C# 如何使某些类实现接口,同时将这些类内置到程序集中
我的意思是,例如,有类A、类B和类C。A、B、C都有一个方法void M(),但它们都没有声明为实现任何接口C# 如何使某些类实现接口,同时将这些类内置到程序集中,c#,interface,refactoring,C#,Interface,Refactoring,我的意思是,例如,有类A、类B和类C。A、B、C都有一个方法void M(),但它们都没有声明为实现任何接口 public class AAdapter : A, IMyInterface { } 所以我给出了一个带有void M()约束的接口。但是类A、B、C是程序集中的类型 是否有任何方法可以使用这些类,就好像它们已经实现了一个接口一样。没有,没有任何方法可以这样做 public class AAdapter : A, IMyInterface { } 但是,您可以编写从A、B和C继承的
public class AAdapter : A, IMyInterface
{
}
所以我给出了一个带有void M()约束的接口。但是类A、B、C是程序集中的类型
是否有任何方法可以使用这些类,就好像它们已经实现了一个接口一样。没有,没有任何方法可以这样做
public class AAdapter : A, IMyInterface
{
}
但是,您可以编写从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);
优点是,在使用自己的代码时,现在可以有一个约束
Distadvantage,然后您必须在程序集中使用您的类版本,而不是他们的版本。您不控制程序集的代码吗?当然这是不可能的。你必须重写代码。使用反射是一个遥远的第二个解决方案。我提到的类是由其他团队维护的,我认为在我的情况下修改这些类不是一个好主意。所以我选择使用托马斯·列夫斯克和阿列克谢·列文科夫给出的解决方案。谢谢。