亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

聲明對我不擁有的類的 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 關注
  • 212 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號