劉鐵猛C#教程學(xué)習(xí)筆記5 操作符詳解1

一.操作符的優(yōu)先級
上表格中從上往下操作符優(yōu)先級依次降低,上面的操作符優(yōu)先級更高,更先運算

提升優(yōu)先級的方法
可以通過加圓括號的方式,提高表達(dá)式的運算優(yōu)先級(圓括號可嵌套)
同優(yōu)先級的運算順序
同一行操作符運算優(yōu)先級相同,優(yōu)先級相同時大部分按照從左向右的順序依次運算
但帶有賦值功能的操作符固定為最晚運算,且同級運算順序為從右向左
(把右邊的值賦給左邊)
常用簡寫方法
x += y; ? ? ? 等同于 ? ? ? x = x + y;
X -= y; ? ? ? 等同于 ? ? ? x = x - y;
例:
x += y += z;
因為+=是帶有賦值功能的操作符,所以運算順序是從右到左
先算 y += z
再算 x += y
當(dāng)x = 100,y= 200 ,z = 300時
X += y += z運算后
結(jié)果x = 600,y = 500 , z = 300;
計算機(jī)操作符無結(jié)合律
3+4+5 只能理解為Add(Add(3,4),5),不能理解為Add(3,Add(4+5))
二.操作符的本質(zhì)

操作符的本質(zhì)是對函數(shù)(算法)的簡記法
加號“+”可以當(dāng)作Add函數(shù)的簡記
乘號“×”是對多次加法的簡記
操作符不能脫離它關(guān)聯(lián)的數(shù)據(jù)類型
例如程序中整型int的除法,只能得到整數(shù)類型int的答案(整除)
而double、float型數(shù)據(jù)除法得到的就是對應(yīng)的double、float類型的小數(shù)
尤其C#是一種強(qiáng)類型語言
操作符簡單定義
操作符可以說是一種與固定數(shù)據(jù)類型關(guān)聯(lián)的一套基本算法的簡記
可以為為自定義數(shù)據(jù)類型創(chuàng)建操作符
例:
先創(chuàng)建一個靜態(tài)方法
三.用操作符定義和引用方法*
操作符是對方法的簡記
所以靜態(tài)函數(shù)”GetMarry”的創(chuàng)建還可以有如下的表示法
調(diào)用方法時寫為:
四.基本操作符

基本運算符用來組成基本表達(dá)式,基本表達(dá)式是是最簡單的、不能再拆分的,用來組成其他表達(dá)式
所以基本運算符優(yōu)先級最高,最先運算
1.成員訪問操作符“.”

1.用來訪問外層命名空間中的子集命名空間
2.用來訪問命名空間中的類型
3.用來訪問類型中的靜態(tài)成員
4.用來訪問對象的成員
2.方法調(diào)用操作符“f(x)”
與C/C++基本相同
f為函數(shù)名
x為參數(shù)
即使調(diào)用的函數(shù)沒有參數(shù),也不能省略括號
但在委托中添加方法時,不用寫括號

3.元素訪問操作符“[ ]”
訪問C#數(shù)組
訪問數(shù)組的元素
C#中的創(chuàng)建數(shù)組:
方法1 數(shù)組長度:

使用這種方法創(chuàng)建數(shù)組,創(chuàng)建后數(shù)組內(nèi)有10個元素,且都會會被設(shè)為初始化的默認(rèn)值0
方法2 初始化器:

編譯器會自動數(shù)大括號內(nèi)有幾個數(shù),就創(chuàng)建多大容量的數(shù)組實例
訪問數(shù)組元素:同C/C++
數(shù)組的第一個元素下標(biāo)為0,最后一個元素下標(biāo)為N-1
數(shù)組類型的成員方法中,.Length可以得到數(shù)組的長度N
下標(biāo)超出數(shù)組下標(biāo)范圍時編譯會報錯
訪問C#字典(鍵值對?)
ex:一個類后面跟著尖括號"< >"說明這個類是泛型類,之后會講
創(chuàng)建字典并初始化:

string為這個泛型類的索引類型,student為泛型類的值類型
可以通過索引找到值(哈希)

已知索引,訪問值:在方括號中寫要訪問的索引,在這個例子中索引為string類型
4.自增自減操作符“++”、“--”
前置自增x++
x++:變量X的值變?yōu)閄+1,而x++這個表達(dá)式的值為X
后置自增操作符是先賦值再自增
x--同理
后置自增++x
賦值運算順序與前置相反
前置自增操作符是先自增再賦值
--x同理
5.typeof 查看類型的內(nèi)部結(jié)構(gòu)
類型的內(nèi)部結(jié)構(gòu):metadata,元數(shù)據(jù)
6.default ?獲取類型默認(rèn)值
(1)結(jié)構(gòu)體類型(值類型)
(2)引用類型
引用類型的默認(rèn)值為NULL
(3)枚舉類型

結(jié)果為Low
枚舉類型的默認(rèn)值為聲明時的第一個值
類似數(shù)組的第一個元素
但聲明時給枚舉類型進(jìn)行了顯性的賦值時:
此時打印結(jié)果為Mid
聲明時進(jìn)行了賦值時,枚舉類型的默認(rèn)值為賦值為0的值
7.new 創(chuàng)建實例調(diào)用構(gòu)造器
var關(guān)鍵字
來源于單詞Variable ,可變類型
Int x; ?顯式類型變量
var x; 隱式類型變量 ?“我給他賦值的時候,程序你自己看著辦”
x = 100;時,x類型被定為int
x = 100f;時,x的類型被定為float
C#是強(qiáng)類型語言,var變量的類型一旦被賦值確定,類型就不能再改變
var變量的類型由第一次賦值決定,之后不能再改變
new操作符主要功能
創(chuàng)建一個類型的實例,并馬上調(diào)用該類型的實例構(gòu)造器
能獲得創(chuàng)建的實例的內(nèi)存地址,并通過“=”賦值給訪問這個實例的引用變量
附加功能
(1)調(diào)用實例的初始化器
在大括號內(nèi)給實例的成員變量初始化賦值,可同時初始化多個成員變量
(2)同時使用成員訪問操作符
可以運行并顯示,只是創(chuàng)建的實例因為沒有引用變量引用,之后會被C#垃圾收集器銷毀
可用于訪問一次性對象
(3)不同new創(chuàng)造實例的例子
string是一個類(class)類型,但使用時不用創(chuàng)建實例
因為string過于常用,是一個基本類型,C#對其開了一個語法糖,隱藏了自動的new操作符
手動用new操作符創(chuàng)建實例也是可以的
整型數(shù)組
Int [ ] myArray = { 1, 2, 3, 4, };
整型數(shù)組用大括號初始化時,不用new創(chuàng)建實例,這也是一個語法糖
(4)為匿名類型創(chuàng)建實例
即使沒有手動創(chuàng)建有名字的類型,這個程序也可以使用
程序會自動創(chuàng)建匿名的、成員包含Name、Age字段的泛型類型
由此可見var關(guān)鍵字在泛型領(lǐng)域可大展拳腳
危險警告
一旦在一個類中調(diào)用了new操作符,會使這個類與用new創(chuàng)建實例的類型產(chǎn)生非常緊密的耦合!(緊耦合)
ex:參見【設(shè)計模式】-【依賴之路】,可以學(xué)習(xí)如何將緊耦合變?yōu)橄鄬捤傻鸟詈?/p>
new關(guān)鍵字的其他用途
(1)當(dāng)作操作符來使用
(2)new用于子類對父類方法的隱藏
new關(guān)鍵字,作為修飾符使用在子類的實例方法前,該方法與父類中的方法頭完全一致
此時會隱藏父類的方法,子類用該方法名調(diào)用時使用子類自己的方法