使用擴充套件方法來擴充套件介面

2021-09-22 16:56:52 字數 1349 閱讀 4372

不清楚擴充套件方法的清先預熱下

推薦:摘抄:

1

、擴充套件方法跟原來類的方法重名時候的處理邏輯

2、擴充套件方法的巢狀

現在我們來看擴充套件方法使用的第三個場景:使用擴充套件方法來擴充套件介面

應用場景舉例:

我們有時候會發現最初定義的乙個介面,在現在環境下,這個介面需要再增加乙個函式。有了擴充套件方法後,我們在這種情況下又多了一種實現的選擇。

。。。。。。

分析這樣做的好處:

1、假如我們實現 myinte***ce 介面的類很多,這些類沒有派生關係,這時候我們要在介面上新增乙個函式,按照以前的做法,這個介面的實現類有多少個,我們就需要改多少個,使用了擴充套件方法後,我們只需要改乙個地方。減少**量。假如實現這個介面的類被封裝在不同的元件中,一些元件由於其他原因難以修改,這時候用擴充套件方法來擴充套件介面真是給我們一劑良藥呀;

2、擴充套件方法被呼叫到,前提條件是擴充套件方法所在的命名空間被使用了。我們假如把介面跟擴充套件方法放到同乙個命名空間,擴充套件方法需要引用命名空間的問題就能夠認為不存在了。因為您要用這個介面,必然會引用這個命名空間。

3、擴充套件方法擴充套件的介面,和您自己實現這個介面的類中自己實現的函式重名時候的問題(這時候也能夠簡單認為是這個類 override

了這個函式實現)。

先說結論:這兩個不存在衝突問題,您假如是介面呼叫,則是擴充套件方法,假如是實現類呼叫,則是實現類自己的方法

1.類

///

///介面

/// public

inte***ce

ieatclass

//////

實現類

/// public

class

eatclass : ieatclass

}//////

擴充套件類

/// public

static

class

eatclas***tensions

}

2.呼叫

eatclass eat = new

eatclass();

var res = eat.haseat();//

輸出false

var res1 = eat.haseat(1);//

輸出true

3.如果擴充套件方法在不同的命名空間下

**:

namespace

company.business.ext

}}

呼叫時候加上新命名空間即可

using company.business.ext;

在不同的命名空間下這個破問題,折騰了一早上,基礎太差了,繼續幹活。。。

C 3 0 中使用擴充套件方法來擴充套件介面

有關擴充套件方法的一些知識點請參看我的前篇部落格 c 3.0 中的擴充套件方法 extension methods 前篇部落格中我重點介紹了兩個特殊場景 1 擴充套件方法跟原來類的方法重名時候的處理邏輯 2 擴充套件方法的巢狀 現在我們來看擴充套件方法使用的第三個場景 使用擴充套件方法來擴充套件介面...

C 3 0 中使用擴充套件方法來擴充套件介面

有關擴充套件方法的一些知識點請參看我的前篇部落格 c 3.0 中的擴充套件方法 extension methods 前篇部落格中我重點介紹了兩個特殊場景 1 擴充套件方法跟原來類的方法重名時候的處理邏輯 2 擴充套件方法的巢狀 現在我們來看擴充套件方法使用的第三個場景 使用擴充套件方法來擴充套件介面...

C 3 0 中使用擴充套件方法來擴充套件介面 C 應用

前篇部落格中我重點介紹了兩個特殊場景 1 擴充套件方法跟原來類的方法重名時候的處理邏輯 2 擴充套件方法的巢狀 現在我們來看擴充套件方法使用的第三個場景 使用擴充套件方法來擴充套件介面 應用場景舉例 我們有時候會發現最初定義的乙個介面,在現在環境下,這個介面需要再增加乙個函式。有了擴充套件方法後,我...