声明对我不拥有的类的 C# 接口的一致性

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


class A {

    ...

    int ID {get;}

    ...

}


class B {

    ...

    int ID {get;}

    ...

}

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


interface IHasID

{

    int ID {get;}

}

但是我不能在调用我的方法时将其视为A或B视为IHasID。


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


扬帆大鱼
浏览 178回答 3
3回答

一只斗牛犬

不,目前没有办法做到这一点。你可以:只需使用动态类型并ID在编译时使用这种方式而不进行类型检查每一个的环绕库班在自己的类是不实现的接口要求维护者添加一个接口这是可能的,这个功能将在一段时间内被添加到C#。有关详细信息,请参阅 Mads Torgersen关于形状的问题- 但我怀疑还有很长的路要走。

侃侃无极

制作一个具有以下所有内容的通用包装类:IHasID接口的实现,一个接受T和Func<T,int>获取 ID 的构造函数,以及包装值的吸气剂。下面是一个例子:class HasId<T> : IHasId {&nbsp; &nbsp; private readonly Func<T,int> idGetter;&nbsp; &nbsp; public Value {get;}&nbsp; &nbsp; public Id => idGetter(Value);&nbsp; &nbsp; public HasId(T val, Func<T,int> idGetter) {&nbsp; &nbsp; &nbsp; &nbsp; Value = value;&nbsp; &nbsp; &nbsp; &nbsp; this.idGetter = idGetter;&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP