为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
扬帆大鱼 2021-08-22 14:44:57
假设我正在使用第三方库中的多个类,所有这些类都包含一个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# 做到这一点的方法。引用共享属性的不相关类的最接近方法是什么?
查看完整描述

3 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

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

  • 只需使用动态类型并ID在编译时使用这种方式而不进行类型检查

  • 每一个的环绕库班在自己的类是实现的接口

  • 要求维护者添加一个接口

这是可能的,这个功能将在一段时间内被添加到C#。有关详细信息,请参阅 Mads Torgersen关于形状问题- 但我怀疑还有很长的路要走。


查看完整回答
反对 回复 2021-08-22
?
侃侃无极

TA贡献2051条经验 获得超10个赞

制作一个具有以下所有内容的通用包装类:


IHasID接口的实现,

一个接受T和Func<T,int>获取 ID 的构造函数,以及

包装值的吸气剂。

下面是一个例子:


class HasId<T> : IHasId {

    private readonly Func<T,int> idGetter;

    public Value {get;}

    public Id => idGetter(Value);

    public HasId(T val, Func<T,int> idGetter) {

        Value = value;

        this.idGetter = idGetter;

    }

}


查看完整回答
反对 回复 2021-08-22
  • 3 回答
  • 0 关注
  • 177 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信