C#:我可以扩展一个外部类,使它实现一个本地接口

P. *_*ery 0 c# reflection .net-assembly

我有2个组件(外国和本地).外部装配不能修改.我想扩展一个外来类,以便它现在实现一个本地接口.这可能在C#中吗?

编辑:我知道我可以做以下事情:

// foreign.dll
namespace DX {
    public struct Vector3 {
        ...
    }
}

// local.dll
namespace MyDX {
    public static class Extensions {
        public static void MyExtensionMethod( this Vector3 vec, int index ){
            ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我感兴趣的是强制外部类/结构实现特定的接口(不使用继承).我想将Vector3用作泛型类中的类型:

public class MyGeneric<T> where T: IComparable<T> {
    T _value;
}
Run Code Online (Sandbox Code Playgroud)

上面的结构:Vector3没有实现IComparable,但是我想使用反射来实现接口,这样我就可以使用现有形式的外部类/结构(即使用继承的w/o).继承可能是必要的......

Eri*_*ert 9

我可以扩展外部类,使其实现本地接口

当然,前提是外国人没有密封.(当然,可以访问本地项目,等等.)

// Foreign.DLL
namespace F 
{ 
  public class B 
  {
    public void Foo() { }
  }
}

// Local.DLL
interface IFooBar 
{ 
  void Foo();
  void Bar();
}
class D : F.B, IFooBar
{
  public void Bar() { }
}
Run Code Online (Sandbox Code Playgroud)

在那里,根据需要D扩展F.B,并根据需要D实现IFooBar.请注意即使它在基类上也F.B.Foo符合合同义务IFooBar.

如果外国人被密封,那么你将不得不使用构成而不是继承.

但是,我同意评论者说这闻起来像XY问题.你能说出你真正想要解决的问题吗?因为可能有更好的方法来实现你想要的.