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

目錄

柚子快報(bào)邀請(qǐng)碼778899分享:【無(wú)標(biāo)題】 C#的學(xué)習(xí)筆記

柚子快報(bào)邀請(qǐng)碼778899分享:【無(wú)標(biāo)題】 C#的學(xué)習(xí)筆記

http://yzkb.51969.com/

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C# 學(xué)習(xí)筆記

一.類與命名空間

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

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

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

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

二.對(duì)象與實(shí)例化

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

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

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

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

?

? myForm.ShouDialog();`

三.C#語(yǔ)言的基本元素

關(guān)鍵字 操作符 標(biāo)識(shí)符 標(biāo)點(diǎn)符號(hào) 文本 空白與注釋

3.0F :單精度浮點(diǎn)型;

4.0D:雙精度類型;

long L 64比特位; var自動(dòng)獲取類型。

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

四.類型在C#語(yǔ)言中的作用

一個(gè)C#類型中包含的信息有:

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

C#是強(qiáng)制類型語(yǔ)言,dynamic 兼容了動(dòng)態(tài)類型。

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

C#語(yǔ)言的類型系統(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#變量,對(duì)象與內(nèi)存

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

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

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

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

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

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

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

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

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

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

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

八.Overload

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

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

九.操作符

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

2.有賦值操作符,會(huì)把實(shí)例的地址賦值給變量

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

?Console.WriteLine(x);

?string binStr=Convert.ToString(x);

?Console.WriteLine(binStr);

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

{

? ? ?try

? ? {

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

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

? ? }

? ? ?catch (OverflowException ex)

? ? {

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

? ? }

}

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

十.類型轉(zhuǎn)換

隱式類型轉(zhuǎn)換

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

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

double.Parse("123");這個(gè)字符串必須正確,否則沒有辦法轉(zhuǎn)換 自定義的類型轉(zhuǎn)換操作符 類型轉(zhuǎn)換也相當(dāng)于是函數(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;

? }

?

}

十一.語(yǔ)句詳解

語(yǔ)句的分類

標(biāo)簽語(yǔ)句,嵌入式語(yǔ)句,聲明語(yǔ)句 try 語(yǔ)句 try catch final語(yǔ)句

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

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

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

字段

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

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

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

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

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

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

十三.參數(shù)

傳值參數(shù)

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

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

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

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

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

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

輸出參數(shù)與值類型:輸出參數(shù)并不創(chuàng)建變量的副本,方法體內(nèi)必需有對(duì)輸出變量的賦值操作,使用out修飾符顯式指出----此方法的副作用是通過(guò)參數(shù)向外輸出值,ref是為了改變,out是為了輸出。 輸出參數(shù)與引用類型:輸出參數(shù)不創(chuàng)建副本,方法體內(nèi)必須要有對(duì)輸出變量賦值的操作,使用out修飾符顯式指出----此方法的副作用是通過(guò)參數(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ù)

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

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

參數(shù)因?yàn)橛心J(rèn)值而變得”可選“ this 參數(shù)

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

十四.委托和聲明

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

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

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

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

委托的高級(jí)使用

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

同步與異步

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

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

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

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

十五.事件

初步了解事件

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

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

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

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

事件的應(yīng)用

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

event source event eventsubsciber eventhandler order 注意

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

事件的聲明

事件的聲明

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

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

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

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

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

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

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

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

屬性不是字段——很多時(shí)候?qū)傩允亲侄蔚陌b器,這個(gè)包裝器用來(lái)保護(hù)字段不被濫用 事件不是委托字段——它是委托字段的包裝器,這個(gè)包裝器用來(lái)保護(hù)委托字段不被濫用 包裝器永遠(yuǎn)都不可能是被包裝的東西

十六.類(聲明即定義)

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

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

~Student(){ } 只要?jiǎng)?chuàng)造了實(shí)例,析構(gòu)器就會(huì)被調(diào)用,釋放一個(gè)對(duì)象的

類的繼承

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

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

派生類對(duì)繼承成員的訪問(wèn) 派生類對(duì)基類成員的訪問(wèn) 構(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);

? ? ? }

? }

? “橫向擴(kuò)展” (成員越來(lái)越多)

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

行為不變,版本升高 重寫與隱藏:函數(shù)成員,可見,簽名一致 多態(tài)基于重寫機(jī)制(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)物” 具體類——>抽象類——>接口:越來(lái)越抽象,內(nèi)部實(shí)現(xiàn)的東西越來(lái)越少 抽象類是未完全實(shí)現(xiàn)邏輯的類(可以有字段和非public成員,它們代表了“具體邏輯”) 抽象類為復(fù)用而生:專門作為基類來(lái)使用,也有解耦功能 ? ?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;

? } 封裝確定的,開放不確定的,推遲到合適的子類中去實(shí)現(xiàn) 接口是完全未實(shí)現(xiàn)邏輯的“類”(純虛類,只有函數(shù)成員,成員全部public) 接口為解耦而生:“高內(nèi)聚,低耦合”,方便單元測(cè)試 接口是一個(gè)“協(xié)約” 他們不能夠?qū)嵗?,只能用?lái)聲明變量,引用具體類的實(shí)例 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");

? ? }

}

接口與單元測(cè)試

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

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

十八.反射與注入

反射:以不變應(yīng)萬(wàn)變(更松的耦合),反射機(jī)制,封裝好的反射,邏輯并不確定 反射與接口的結(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類

減少類的派生 分成多部分進(jìn)行編寫,可以用不同語(yǔ)言編寫

二十.lambda表達(dá)式

lambda表達(dá)式,用來(lái)表達(dá)匿名的方法,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);

柚子快報(bào)邀請(qǐng)碼778899分享:【無(wú)標(biāo)題】 C#的學(xué)習(xí)筆記

http://yzkb.51969.com/

參考鏈接

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

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

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

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

發(fā)布評(píng)論

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

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問(wèn)

文章目錄