欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:【無標題】 C#的學習筆記

柚子快報邀請碼778899分享:【無標題】 C#的學習筆記

http://yzkb.51969.com/

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C# 學習筆記

一.類與命名空間

類與命名空間都是一個抽象的概念。

個人的理解,命名空間相當于是很多類的集合,要想使用類中的特定功能,需要命名空間的調(diào)用。using System;

類中包括三大成員:屬性,方法,事件。通過使用類中的相關(guān)內(nèi)容,對程序進行實現(xiàn)。(不同類對于屬性,方法和事件的側(cè)重不同)

命名空間,類的引用有黑盒引用和白盒引用。

二.對象與實例化

對象:一般是稱現(xiàn)實生活中所研究的物體。

類,中有很多的屬性,這是抽象的概念。而類要實例化,并且對他附加屬性。不能說飛機怎樣怎樣,但是一個飛機可以怎樣怎樣,這是我們可以實現(xiàn)的。

? ` ? Form myForm =new Form();`

? ? ? `myForm.Text ="My Form";`

?

? myForm.ShouDialog();`

三.C#語言的基本元素

關(guān)鍵字 操作符 標識符 標點符號 文本 空白與注釋

3.0F :單精度浮點型;

4.0D:雙精度類型;

long L 64比特位; var自動獲取類型。

變量 與方法(算法/函數(shù))

四.類型在C#語言中的作用

一個C#類型中包含的信息有:

存儲此類型的所需內(nèi)存大小 此類型的值表示的最大,最小范圍 此類型所包含的成員 此類型的基派衍生 此類型變量分配在內(nèi)存的位置 Stack 與 Heap 運算

C#是強制類型語言,dynamic 兼容了動態(tài)類型。

五.C#語言的數(shù)據(jù)類型系統(tǒng)

C#語言的類型系統(tǒng)

引用類型:類,接口,委托 object string(1.太常用的數(shù)據(jù)類型,變?yōu)榱岁P(guān)鍵字 2.最基本的構(gòu)成其他的) class interface delegate 值類型:結(jié)構(gòu)體,枚舉 bool byte char decimal double float int long sbyte short uint ulong ushort (1.太常用的數(shù)據(jù)類型,變?yōu)榱岁P(guān)鍵字 2.最基本的構(gòu)成其他的) struct enum true false void null var dynamic

六.C#變量,對象與內(nèi)存

變量是儲存數(shù)據(jù)的

var 隱式變量,編譯器自己推斷是什么變量。 變量=以變量名所對應(yīng)的內(nèi)存地址為起點,以其數(shù)據(jù)類型所要求的存儲空間為長度的一塊內(nèi)存區(qū)域。 變量表示了存儲位置,并且每個變量都有一個類型,以決定什么樣的值能夠存入變量

靜態(tài)變量,實例變量(字段),數(shù)組元素,值參數(shù),引用參數(shù),輸出形參,局部變量, 狹義上,變量指的是局部變量。 值類型變量,值類型沒有實例,所謂的”實例“與變量合而為一。(不用new) 引用類型的變量與實例

引用類型變量與實例關(guān)系:引用類型變量里存儲的數(shù)據(jù)是對象的內(nèi)存地址。 訪問對象的屬性,是在堆上開辟空間。 局部變量在stack上分配內(nèi)存 變量默認值為0;(stack上未賦值的局部變量會報錯) 裝箱與拆箱

裝箱是:把棧上的數(shù)據(jù)存儲到堆上,而拆箱:是把堆上的數(shù)據(jù)移動回棧上。 裝箱與拆箱都會消耗性能。

七.方法(函數(shù))

方法的前身是C/C++語言中的函數(shù)(function)

方法是面向?qū)ο蠓懂牭母拍?,在非面向?qū)ο笳Z言中仍然成為函數(shù)。 可以理解為,把函數(shù)封裝成立類的一個成員屬性,這個屬性理解為方法。 永遠都是類(結(jié)構(gòu)體的)成員

C#語言中函數(shù)不可能獨立于類(結(jié)構(gòu)體)之外 只有作為類的成員才能被稱為方法 C++中是可以稱為”全局函數(shù)“ 類與結(jié)構(gòu)體最基本的成員有:字段與方法,本質(zhì)還是算法與數(shù)據(jù)。方法表示的是可以做什么事情

需要的原因是:1.隱藏復(fù)雜的邏輯 2.把大算法變成小算法 3.復(fù)用 命名的規(guī)范

大小寫的規(guī)范,單詞全部首字母大寫 用動詞或者動詞短語作為名字 static修飾需要對類進行調(diào)用,而不是實例化調(diào)用 C#是強類型語言,值與變量的類型一定要匹配,不然編譯器會報錯。

八.Overload

構(gòu)造器:是類的成員之一(狹義的構(gòu)造器是“實例構(gòu)造器”); 構(gòu)造器可以要求強制初始化; 聲明帶有重載的方法

方法簽名由方法的名稱,類型形參的個數(shù)和它的每一個形參(從左到右的順序)的類型和種類(值,引用或輸出)組成,方法簽名不包含返回類型。 實例構(gòu)造函數(shù)前面由它的每一個形參(從左到右的順序)類型和種類(值,引用或輸出)組成。 重載決策(調(diào)用哪個重載)選擇。

九.操作符

本質(zhì):1.操作符的本質(zhì)是函數(shù)(算法)的“簡計法” 2.操作符要與數(shù)據(jù)類型關(guān)聯(lián) default操作符:1.結(jié)構(gòu)體類型,將內(nèi)存中的值全部刷為0,并且返回0; 2.枚舉類型,枚舉中變量會有其對應(yīng)的值,返回為0的 3.引用類型,也是全刷為0,返回的是null new:1.在內(nèi)存當中創(chuàng)造類的實例,并且立刻調(diào)用實例構(gòu)造器(也可以調(diào)用初始化器)

2.有賦值操作符,會把實例的地址賦值給變量

checked 與unchecked 是操作符但是常用的是上下文 ? uint x=uint.MaxValue;

?Console.WriteLine(x);

?string binStr=Convert.ToString(x);

?Console.WriteLine(binStr);

?unchecked(檢查與不檢查一個值在內(nèi)存中是否溢出)上下文

{

? ? ?try

? ? {

? ? ? ? ?uint y = x + 1;

? ? ? ? ?Console.WriteLine(y);

? ? }

? ? ?catch (OverflowException ex)

? ? {

? ? ?Console.WriteLine("There ");

? ? }

}

? delegate 操作符被更加簡單的 Lambda 表達式取代了。與匿名函數(shù)的創(chuàng)建有關(guān)。 is操作符是判斷是否為某類的實例化,要求需要符合邏輯 as 操作符,是是否像什么一樣,一樣返回地址,不一樣返回null ? 與??操作符 int? x = null; int y = x ?? 10; Console.WriteLine(y);

十.類型轉(zhuǎn)換

隱式類型轉(zhuǎn)換

不丟失精度的轉(zhuǎn)換(int->long) 子類向父類轉(zhuǎn),類是子類從父類繼承,子類可以繼承父類的屬性,但是父類可以容納子類的地址,但是屬性不可為子類,而為父類的屬性。 裝箱 顯式類型轉(zhuǎn)換

可能會丟失精度(甚至產(chǎn)生錯誤)轉(zhuǎn)換 拆箱 Convert類的使用 ToString方法(object 最基礎(chǔ)的屬性),以及Parse/TryParse方法

double.Parse("123");這個字符串必須正確,否則沒有辦法轉(zhuǎn)換 自定義的類型轉(zhuǎn)換操作符 類型轉(zhuǎn)換也相當于是函數(shù) namespace studyC_

{

? ?internal class Program

? {

? ? ? ?static void Main(string[] args)

? ? ? {

? ? ? ? ? ?Stone stone= new Stone();

? ? ? ? ? ?stone.Age = 5000;

? ? ? ? ? ?Monkey wukongSun = (Monkey)stone;

? ? ? ? ? ?Console.WriteLine(wukongSun.Age);

? ? ? }

? }

? ?class Stone

? {

? ? ? ?public int Age;

? ? ? ?public static explicit operator Monkey(Stone stone)

? ? ? {

? ? ? ? ? ?Monkey m= new Monkey();

? ? ? ? ? ?m.Age = stone.Age/500;

? ? ? ? ? ?return m;

? ? ? }

? }

?

? ?class Monkey

? {

? ? ? ?public int Age;

? }

?

}

十一.語句詳解

語句的分類

標簽語句,嵌入式語句,聲明語句 try 語句 try catch final語句

try { } catch(ArgumentNullException/FormatException/OverflowExceptin) { } catch 的問題還可以throw ,throw 可以把問題拋給調(diào)用的實例,然后再try,catch。 throw的使用很是靈活。 foreach語句,遍歷枚舉一個集合元素。并對該集合中每個元素執(zhí)行一次相關(guān)的嵌入語句。

可以被遍歷的集合:數(shù)組和泛型的實例。所有數(shù)組類型都是Array這個基類。 Array的一個接口,I開頭 IEnumerable 這個接口只有一個方法,GetEnumerator()迭代器。 迭代器,using System.Collections; 儲存迭代器容器IEnumerable它有3個object,Current 是當前, Reset( )是撥回去,MoverNext( )是下一個。 List list = new List() { 1,2,3,4,5,6,7}; foreach (var current in list) { Console.WriteLine(current); }

十二.字段,屬性,索引,常量(類和結(jié)構(gòu)體所具有的成員)

字段

字段(field)與對象或類型(類與結(jié)構(gòu)體)關(guān)聯(lián)的變量 與對象關(guān)聯(lián)的字段叫做”實例字段“,與類型關(guān)聯(lián)的字段”靜態(tài)字段“,由static修飾,調(diào)用的時候也是直接調(diào)用。 字段的修飾,只讀字段可以初始化(構(gòu)造器初始化),但是不能夠賦值。(readonly),只讀字段的初始化是要借用構(gòu)造器,但決定不能賦值。(靜態(tài)與非靜態(tài)一樣) 屬性

set 與 get 使用 set 是設(shè)置值的,get是獲取值的

propfull 可以快捷設(shè)置get set 屬性是一種用于訪問對象或類型的特征的成員,特征反映了狀態(tài) 屬性是字段的自然擴展

field更偏向于實例對象在內(nèi)存中的布局,property更偏向于反映現(xiàn)實世界的特征 對外:暴露數(shù)據(jù),數(shù)據(jù)可以存儲在字段里,也可以是動態(tài)計算出來的 對內(nèi):保護字段不被非法值”污染“ 屬性由Get/Set方法進化而來,是一種語法糖 實例屬性,與靜態(tài)屬性(static) 只讀屬性只有g(shù)etter,沒有set,怎樣賦值都會報錯。 private set { },的話,只能在類里面進行賦值,在外面沒有辦法訪問。 要用屬性暴露數(shù)據(jù),而字段都是private或protected 索引器

它可以使對象能夠與數(shù)組相同的方式進行索引。index 常量

為了提高程序可讀性與執(zhí)行效率——常量 為了防止對象值被改變——只讀字段 向外暴露不允許修改的數(shù)據(jù)——只讀屬性 當希望成為常量的值其類型不能被常量聲明接時——靜態(tài)只讀字段。

十三.參數(shù)

傳值參數(shù)

傳值參數(shù)與值類型 :創(chuàng)建變量的副本 對值參數(shù)操作不會影響變量的值 傳值參數(shù)與引用類型,要創(chuàng)建新對象

值參數(shù)創(chuàng)建變量副本,對值參數(shù)的操作永遠不影響變量值 只操作對象,不創(chuàng)建新對象

對象還是那個對象,但是對象中的值已經(jīng)改變了 引用參數(shù)

引用參數(shù)與值類型:不創(chuàng)建變量副本,ref修飾符顯式指出----此方法的副作用是改變實際參數(shù)的值 引用參數(shù)與引用類型,創(chuàng)建新對象

引用參數(shù)不創(chuàng)建變量副本,ref修飾符顯式指出---改變實參值 不創(chuàng)建新對象只改變值

與傳值參數(shù)效果相同,但是機理不同 輸出參數(shù)

輸出參數(shù)與值類型:輸出參數(shù)并不創(chuàng)建變量的副本,方法體內(nèi)必需有對輸出變量的賦值操作,使用out修飾符顯式指出----此方法的副作用是通過參數(shù)向外輸出值,ref是為了改變,out是為了輸出。 輸出參數(shù)與引用類型:輸出參數(shù)不創(chuàng)建副本,方法體內(nèi)必須要有對輸出變量賦值的操作,使用out修飾符顯式指出----此方法的副作用是通過參數(shù)向外輸出值,ref是為了改變,out是為了輸出。 Console.WriteLine("please write a number"); string arg1 =Console.ReadLine(); double x = 0; bool b1=double.TryParse(arg1, out x); if(b1 == false ) { Console.WriteLine("your enter has error"); return; } 數(shù)組參數(shù)

必須是形參列表中最后一個,由params修飾 str.Splist('.' , ','); 具名參數(shù)

參數(shù)的位置不再受約束 可選參數(shù)

參數(shù)因為有默認值而變得”可選“ this 參數(shù)

公用,靜態(tài)的,public static所修飾 必須是形參列表中第一個,由this修飾 必須由一個靜態(tài)類,一般類名為SomeTypeExtension,來同意收納擴展方法 LINQ方法 總結(jié) 傳值參數(shù):參數(shù)的默認傳遞方法 輸出參數(shù):用于除返回值外還需要輸出的場景 引用參數(shù):用于需要修改實際參數(shù)值的場景 數(shù)據(jù)參數(shù):用于簡化方法的調(diào)用 具名參數(shù):提高可讀性 可選參數(shù):參數(shù)擁有默認值 this參數(shù):為目標數(shù)據(jù)類型”追加“方法

十四.委托和聲明

委托(delegate)是函數(shù)指針的”升級版“ `Calculatar calculatar = new Calculatar();` `calculatar.Report();` `Action action = new Action(calculatar.Report);` `action.Invoke();` action(); 一切皆是地址

變量(數(shù)據(jù))是以某個地址為起點的一段內(nèi)存中所儲存的值 函數(shù)(算法)是以某個地址為起點的一段內(nèi)存中所存儲的一組機器語言指令 直接調(diào)用與間接調(diào)用

直接調(diào)用:通過函數(shù)名來調(diào)用函數(shù),CPU通過函數(shù)名直接獲得函數(shù)所在地址并開始執(zhí)行--->返回 間接調(diào)用:通過函數(shù)指針調(diào)用函數(shù),CPU通過讀取指針存儲的值獲得函數(shù)所在地址并開始執(zhí)行--->返回 Java中沒有與委托相對應(yīng)的功能實體 委托的簡單使用

Action委托 Func委托 委托是一種類(總的命名空間里面),類是數(shù)據(jù)類型所有委托也是一種數(shù)據(jù)類型 它的聲明方式與一般的類不同,主要是為了照顧可讀性和C/C++傳統(tǒng) delegate type Calc(type x,type` y);

委托的高級使用

多播(multicast)委托 隱式異步調(diào)用

同步與異步

同步:你做完了我(在你的基礎(chǔ)上)接著做 異步:咋們兩個同時做(中文意思是同步進行) 同步調(diào)用與異步調(diào)用的對比

每一個運行的程序都是一個進程(process) 每個進程可以有一個或者多個線程(thread) 同步調(diào)用是在同一個線程內(nèi) 異步調(diào)用的底層機制是多線程 串行= =同步= =單線程。并行= =異步= =多線程 隱式多線程 與 顯式多線程

直接同步調(diào)用:使用方法名 間接同步調(diào)用:使用單播/多播委托的Invoke方法 隱式異步調(diào)用:使用委托的BenginInvoke 顯示異步調(diào)用:使用Thread或Task 應(yīng)當適當?shù)厥褂媒涌冢╥nterface)取代一些對委托的使用

java完全用接口取代了委托的功能,即Java沒有與C#中委托相對應(yīng)的功能實體

十五.事件

初步了解事件

定義:”能夠發(fā)生什么事情“ 角色:使對象或類具備通知能力的成員

An event is a member that enables an object or class to provide notifications 使用:事件模型

1.關(guān)心的事情 2.有東西關(guān)心這個事件 3.事件發(fā)生了 4.這個關(guān)心的東西被依次通知到了 5.處理事件 注意:

事件多用于桌面,手機等開發(fā)客戶端編程 各種語言實現(xiàn)方法并不相同 Java接口來實現(xiàn) MVC,MVP,MVVM是事件更加高級,更有效的”玩法“

事件的應(yīng)用

派生(繼承)與擴展(extends) 事件模型五部分

event source event eventsubsciber eventhandler order 注意

事件處理器是方法成員 掛接事件處理器的時候,可以使用委托實例,也可以直接使用方法名,”語法糖“ 事件處理器對事件的訂閱不是隨意的,匹配與否由聲明事件時所使用的委托類型來檢測 事件可以同步調(diào)用也可以異步調(diào)用

事件的聲明

事件的聲明

完整聲明 簡略聲明(字段式聲明,field-like) 原因:謹防”借刀殺人“ 事件的本質(zhì)是委托字段的一個包裝器

這個包裝器對委托字段的訪問起限制作用,相當于”蒙版“ 封裝(encapsulation)的一個重要功能就是隱藏 事件對外界隱藏了委托實例的大部分功能,僅暴露添加/移除事件處理器的功能 添加/移除事件處理器的時候可以直接使用方法名,這是委托實例所不具備的功能 用于聲明事件的委托類型的命名約定

用于聲明Foo事件的委托,一般命名為FooEvebtHandler(除非是一個非常通用的事件約束) FooEventHandler委托的參數(shù)一般有兩個

第一個是object類型,名字為sender,實際上就是事件的擁有者,事件的source 第二個是EventArgs類的派生類,類名一般為FooEventArgs,參數(shù)名為e。事件參數(shù) 雖然沒有官方說法,但是我們可以把委托的參數(shù)列表看成是事件發(fā)生后發(fā)送給事件響應(yīng)者的”事件消息“ 觸發(fā)Foo事件的方法一般命名為OnFoo,即”因何引發(fā)“,”事出有因“

訪問級別為protected,不能為public,否則又是”借刀殺人“了 事件的命名約定

帶有時態(tài)的動詞或者動詞短語 事件擁有者“正在做”什么事,用進行時;事件擁有者“做完了”什么事情,用完成時 事件與委托的關(guān)系

事件聲明的時候使用了委托類型,簡化聲明造成事件看上去像一個委托的字段(實例),而event關(guān)鍵字更像是一個修飾符-----這就是錯覺來源。 事件的本質(zhì)是加裝在委托字段上的一個“蒙版”,是個起掩蔽作用的包裝器。這個用于阻擋非法操作的“蒙版”絕不是委托字段本身 為什么要使用委托類型聲明事件

source角度,source能對外傳遞那些消息 subscriber的角度,一種約定,為了約束能夠使用什么樣的簽名方法來處理,(響應(yīng)事件) 委托類型的實例用于儲存事件處理器 對比事件與屬性

屬性不是字段——很多時候?qū)傩允亲侄蔚陌b器,這個包裝器用來保護字段不被濫用 事件不是委托字段——它是委托字段的包裝器,這個包裝器用來保護委托字段不被濫用 包裝器永遠都不可能是被包裝的東西

十六.類(聲明即定義)

是一種數(shù)據(jù)結(jié)構(gòu) 一種數(shù)據(jù)類型 代表現(xiàn)實世界中的“種類”

析構(gòu)器(析構(gòu)函數(shù))

~Student(){ } 只要創(chuàng)造了實例,析構(gòu)器就會被調(diào)用,釋放一個對象的

類的繼承

類在功能上的擴展,只能有一個基類,但是可以實現(xiàn)多個基接口 private < protected < internal < public

private 僅僅只能在類內(nèi)部調(diào)用,最低級的訪問級別 protected 自己與自己的子類可以調(diào)用 internal 僅為同項目,是單獨的項目。 public 最高級的訪問級別,所有成員對所有人都是可以取用 sealed類修飾說明該類不能被繼承或者重寫。 成員的繼承與訪問

派生類對繼承成員的訪問 派生類對基類成員的訪問 構(gòu)造器不可繼承,如果基類的構(gòu)造器初始化了,衍生類的構(gòu)造器必須初始化 ? ?class Vehicle

? {

? ? ? ?public string Owner { get; set; }

? ? ? ?public Vehicle(string owner)

? ? ? {

? ? ? ? ? ?this.Owner = owner;

? ? ? }

? }

? ?class Car:Vehicle

? {

? ? ? ?public Car(string name) : base(name)

? ? ? {

? }

? ? ? ?public void Report()

? ? ? {

? ? ? ? ? ?Console.WriteLine(Owner);

? ? ? }

? }

? “橫向擴展” (成員越來越多)

多態(tài)----類的縱向繼承

行為不變,版本升高 重寫與隱藏:函數(shù)成員,可見,簽名一致 多態(tài)基于重寫機制(virtual---->override) class Vehicle

{

? ? private int _speed;

? ? public virtual int Speed

? ? {

? ? ? ? get

? ? ? ? {

? ? ? ? ? ? return _speed;

? ? ? ? }

? ? ? ? set

? ? ? ? {

? ? ? ? ? ? _speed = value;

? ? ? ? }

? ? }

? ? public virtual void Run()

? ? {

? ? ? ? Console.WriteLine("I am running");

? ? ? ? _speed = 100;

? ? }

}

?

class Car : Vehicle

{

? ? private int _rpm;

? ? public override void Run()

? ? {

? ? ? ? Console.WriteLine("Car is running");

? ? ? ? _rpm = 10000;

? ? }

? ?public override int Speed

? ? {

? ? ? ? get { return _rpm/100; }

? ? ? ? set { _rpm = value * 100; }

? ? }

}

十七.接口和抽象類

接口和抽象類都是“軟件工程產(chǎn)物” 具體類——>抽象類——>接口:越來越抽象,內(nèi)部實現(xiàn)的東西越來越少 抽象類是未完全實現(xiàn)邏輯的類(可以有字段和非public成員,它們代表了“具體邏輯”) 抽象類為復(fù)用而生:專門作為基類來使用,也有解耦功能 ? ?static int Sum(int[] nums)

? {

? ? ? ?int sum = 0;

? ? ? ?foreach(var n in nums) sum += n;

? ? ? ?return sum;

? }

?

? ?static double Avg(int[] nums)

? {

? ? ? ?int sum = 0;double count = 0;

? ? ? ?foreach(var n in nums) { sum += n;count++; }

? ? ? ?return sum/count;

? }

? ?static double Avg2(ArrayList nums)

? {

? ? ? ?int sum = 0; double count = 0;

? ? ? ?foreach(var n in nums) { sum =sum+(int)n; count++; }

? ? ? ?return sum/count;

? } 封裝確定的,開放不確定的,推遲到合適的子類中去實現(xiàn) 接口是完全未實現(xiàn)邏輯的“類”(純虛類,只有函數(shù)成員,成員全部public) 接口為解耦而生:“高內(nèi)聚,低耦合”,方便單元測試 接口是一個“協(xié)約” 他們不能夠?qū)嵗荒苡脕砺暶髯兞?,引用具體類的實例 interface VehicleBase

{

? ? void Stop();

? ? void Run();

? ? void Fill();

?

}

abstract class Vehicle : VehicleBase

{

? ? public void Stop()

? ? {

? ? ? ? Console.WriteLine("Stopped!");

? ? }

? ? public void Fill()

? ? {

? ? ? ? Console.WriteLine("pAY AND FILL");

}

abstract public void Run();

}

?

class Car:Vehicle

{

? ? public override void Run()

? ? {

? ? ? ? Console.WriteLine("Car is running");

? ? }

}

?

class Truck:Vehicle

{

? ? public override void Run()

? ? {

? ? ? ? Console.WriteLine("T is running");

? ? }

}

接口與單元測試

接口的產(chǎn)生:自底向上(重構(gòu)),自頂向下(設(shè)計) C#中接口的實現(xiàn)(隱式,顯式,多接口) 原則:倚賴反轉(zhuǎn)原則,接口隔離,開/閉原則

接口隔離原則,一個類只做相關(guān)一件事(接口存在兩個以上的接口使用,包含了太多功能,有一部分功能實現(xiàn)不了)

十八.反射與注入

反射:以不變應(yīng)萬變(更松的耦合),反射機制,封裝好的反射,邏輯并不確定 反射與接口的結(jié)合 反射與特性的結(jié)合 依賴注入 ITank tank = new HeavyTank();

var t=tank.GetType();

object o=Activator.CreateInstance(t);

?

MethodInfo FireMi = t.GetMethod("Fire");

MethodInfo RunMi =t.GetMethod("Run");

?

FireMi.Invoke(o, null);

RunMi.Invoke(o, null);

?

十九.泛型與partial類

泛型

為了避免成員膨脹或者類型膨脹 正交性:泛型類型(類/接口/委托......) 泛型成員(屬性/方法/字段......) class Box

{

? ? public T Cargo { get; set; }

} 類型方法的參數(shù)推斷 ? ?static T[] Zip(T[] A, T[] B)

? {

? ? ? ?T[] Z = new T[A.Length + B.Length];

? ? ? ?int a = 0; int b = 0; int c = 0;

? ? ? ?do

? ? ? {

? ? ? ? ? ?if (a < A.Length) Z[c++] = A[a++];

? ? ? ? ? ?if (b < B.Length) Z[c++] = B[b++];

? ? ? } while (a < A.Length || b < B.Length);

?

? ? ? ?return Z;

? } partial類

減少類的派生 分成多部分進行編寫,可以用不同語言編寫

二十.lambda表達式

lambda表達式,用來表達匿名的方法,inline方法

? ? ? ?Func func = (a, b) => a + b; ? ? ? ? int ret = func(100, 200); ? ? ? ? Console.WriteLine(ret); ? ? ? ? Func func1 = (a, b) => a * b; ? ? ? ? double ret2 = func1(2.2, 7); ? ? ? ? Console.WriteLine(ret2);

柚子快報邀請碼778899分享:【無標題】 C#的學習筆記

http://yzkb.51969.com/

參考鏈接

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19120417.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄