首页 > 解决方案 > 为我不拥有的类声明符合 C# 接口

问题描述

假设我正在使用第三方库中的多个类,所有这些都包含一个int ID {get;}属性。例如:

class A {
    ...
    int ID {get;}
    ...
}

class B {
    ...
    int ID {get;}
    ...
}

ID是我需要在我正在编写的方法中使用的唯一属性,它需要引用 A 或 B。我已经声明了一个接口:

interface IHasID
{
    int ID {get;}
}

但是在调用我的方法时,我不能将任何一个AB当作。IHasID

例如,在 Swift 中,我可以声明一个符合“协议”(Swift 的接口版本)的扩展。我没有看到用 C# 做到这一点的方法。引用共享属性的不相关类的最接近方法是什么?

标签: c#interface

解决方案


不,目前没有办法做到这一点。你可以:

  • 只需使用动态类型并ID在编译时使用这种方式而不进行类型检查
  • 将每个库类包装在您自己的实现接口的类
  • 要求维护人员添加接口

这个特性可能会在某个时候添加到 C# 中。有关详细信息,请参阅 Mads Torgersen关于形状的问题- 但我怀疑这还有很长的路要走。


推荐阅读