C 高階學習第十四天

2021-09-13 14:15:34 字數 2600 閱讀 6762

1.用來擴充套件已經定義型別的方法成員。為現有的型別新增方法

2.在靜態類中擴充套件方法,至少有乙個引數,這個引數前加this, this後邊是要擴充套件的類物件

3.不同的封閉泛型,擴充套件的方法也不一樣

//1.擴充套件自定義類的方法

public class person

public int age

public person(string name,int age)

} public static class externperson

年齡:" ,p.name,p.age);}

} int main()

//2.擴充套件系統提供的類的方法

public static class externlist

return c;}

public static int tosum(this listli , int n)

return c;}

}int main()

console.writeline (t.tosum());

console.writeline (t.tosum(50));

}

注:

1.必須在乙個非巢狀,非泛型的靜態類中定義

2.至少有乙個引數

3.第乙個引數必須加上this 關鍵字

4.第乙個引數不能使用任何其他的修飾符

5.第乙個引數不能是指標型別

靜態類不能建立物件(abstract),不可以被繼承(sealed),

不能宣告非靜態成員(例項成員) 只能宣告靜態成員

物件在呼叫某方法時,首先在該類中查詢方法。無則去查詢擴充套件方法。

在查詢擴充套件方法時,首先在當前命名空間查詢,再去引入其他的命名空間查詢。

注:擴充套件方法可以過載,呼叫時根據引數選擇用哪個擴充套件方法。

如果引數也一樣,不同的命名空間可以一樣,同乙個命名空間下不可以

空引用,呼叫例項方法將會丟擲異常,但可以呼叫擴充套件方法。

字類可以呼叫父類的擴充套件方法。擴充套件方法可以繼承到子類中。

public static void fun(this object c)

//所有子類都可以呼叫此擴充套件方法。

宣告形參時,給其新增預設值,當呼叫函式時,就可以不傳參,用預設值計算

如果實參有值,傳引數用實參的值,實參傳乙個引數將代替形參預設的第乙個引數

字類中不顯示呼叫父類建構函式時,會自動呼叫父類無參建構函式

或建構函式的引數帶預設函式

注:可選實參必須放在必選實參的後面

可選實參的預設值必須為常量 : 數字,常量字串,null,const成員,列舉成員

陣列不能為可選實參 //public static void fun(new a t =null) //報錯

用ref 和 out關鍵字標識的引數不能為可選實參 //public static void fun(ref int a) 報錯

public static void addd(int a=3,int b=5)

public static void addd(int b, int a=2) //必選,可選

int main()

int main() //b是addd()方法中的形參名字

泛型引數的轉換,從子類賦值給父類,不行,加上out關鍵字,使泛型引數支援協變性

public inte***ce  myinte***ce{}

myinte***cet = null; myinte***cetb = null; tb =t;

賦值過程中,泛型引數從父類到子類,叫做逆變性,用關鍵字in

public inte***ce  myinte***ce{}

myinte***cet = null; myinte***cetb = null; t =tb;

泛型引數作為返回值時,只能發生協變,從子類到父類

泛型引數作為引數時, 只能逆變, 從父類 到子類

泛型的協變逆變,指的是泛型引數(泛型介面 或 泛型委託中的泛型引數) 的協變逆變

注:1.只有介面和委託才支援泛型引數的協變和逆變,類或泛型方法的型別引數都不支援

2.協變和逆變只適用於引用型別。值型別不支援

3.必須顯示的用in out標記型別引數

4.委託的可變性不要再多播委託中使用

1.只有在程式執行過程中才能確定型別

2.使用expandobject 來實現自己的動態行為,新增新的方法和屬性

dynamic e = new expandoobject ();

e.name = 「luo hai」; e.age = 24;

e.addmethod = (func )(x => x + 1); //指明委託型別

console.writeline (e.name +e.age);

注1.不能用來呼叫擴充套件方法

2.委託與動態型別之間不能進行隱式轉換 dynamin s = x=>x+1 //報錯!

3.不能呼叫建構函式和靜態方法

4.不能講dynamin 關鍵字用於基類,也不能作為型別引數,不能作為介面實現的一部分

python學習 第十四天

在下這廂有禮了 python正規表示式 python通過re模組提供對正規表示式的支援。使用re的一般步驟是先將正規表示式的字串形式編譯為pattern例項,然後使用pattern例項處理文字並獲得匹配結果 乙個match例項 最後使match例項獲得資訊,進行其他的操作。encoding utf ...

linuxC學習第十四天

1 int佔4個位元組,對於int型它能寫入的整數不能超過10個不然編譯就會出錯。在編寫通訊錄一類要超過10個數個的程式時,可以使用long long long long 佔8個位元組,而long可能4個位元組,可能8個位元組。2 在寫函式時,一定要注意形參列表的檢測。如果沒有這一步,一旦有使用者輸...

學習python 第十四天

python 傳送電子郵件 訪問 http協議,傳送郵件要使用smtp。smtp mail transfer protocol 即簡單郵件傳輸協議,它是一組用於由源位址到目的位址傳送郵件的規則,由它來控制信件的中轉方式。python的smtplib提供了一種很方便的途徑傳送電子郵件。它對smtp協議...