C#零基礎(chǔ)開發(fā)中最重要的概念總結(jié)
初步
學(xué)習(xí)C#自然推薦使用宇宙最強(qiáng)IDE Visual Studio,初學(xué)下載社區(qū)版,安裝過程中,將除了移動(dòng)開發(fā)之外的帶有C#和.Net字樣的選項(xiàng)都勾上。
安裝完成后,打開VS->創(chuàng)建新項(xiàng)目->C#控制臺(tái)應(yīng)用->下一步->項(xiàng)目名稱、位置隨便寫->下一步->框架選.Net6.0->點(diǎn)擊創(chuàng)建,然后就會(huì)看到我們的第一個(gè)CSharp程序。
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
代碼的可讀性是非常強(qiáng)的,Console表示控制臺(tái),WriteLine就是寫下一行,合起來就是在命令行中寫一行話,這行話就是Hello World!。
C#中,通過//進(jìn)行單行注釋/**/進(jìn)行多行注釋。每行代碼要以分號(hào);結(jié)尾?。?/p>
按下F5就可以執(zhí)行這段程序了,彈出命令行,內(nèi)容為
Hello, World!
E:\Documents\00\1116\CSharp\MyFirstCS\bin\Debug\net6.0\MyFirstCS.exe (進(jìn)程 17312)已退出,代碼為 0。
要在調(diào)試停止時(shí)自動(dòng)關(guān)閉控制臺(tái),請(qǐng)啟用“工具”->“選項(xiàng)”->“調(diào)試”->“調(diào)試停止時(shí)自動(dòng)關(guān)閉控制臺(tái)”。
按任意鍵關(guān)閉此窗口. . .
這里額外說一段,對(duì)于.Net5.0以前的版本,需要在這個(gè)語句外面套一層Main函數(shù),Main函數(shù)外面套一層Class,Class外面再套一層namespace。
數(shù)學(xué)計(jì)算和函數(shù)
常用的數(shù)學(xué)計(jì)算可通過運(yùn)算符來實(shí)現(xiàn),比如加減乘除,就是+-*\,此外還有%表示求余,例如
Console.WriteLine(5%3);
命令行中出現(xiàn)2。
除了Lisp風(fēng)格的語言之外,絕大多數(shù)編程語言對(duì)四則混合運(yùn)算的支持都有良好的可讀性,比如2+3*5這種式子,其實(shí)是無需詳述的。
但四則混合運(yùn)算其實(shí)并不能完全滿足我們的需求,最起碼很多情況下需要用到平方,為了實(shí)現(xiàn)這個(gè)功能,就需要自定義函數(shù)
double square(double x)
{
return x * x;
}
Console.WriteLine(square(3.5));
F5執(zhí)行之后,命令行輸出了12.25。
接下來,將上面的表達(dá)式對(duì)應(yīng)到y(tǒng)=f(x)=x2這樣的函數(shù)表達(dá)式中
d1 f(d2 x)
{
return y;
}
也就是說,類比數(shù)學(xué)中的概念,square為函數(shù)名,x為自變量,y為因變量。而在編程領(lǐng)域,一般把x叫做輸入?yún)?shù),y則叫做返回值。
而d1和d2所對(duì)應(yīng)的double,則為輸入變量和輸出變量的數(shù)據(jù)類型。
變量和數(shù)據(jù)類型
從數(shù)學(xué)的角度,可以非常簡(jiǎn)單粗暴地理解數(shù)據(jù)類型,即數(shù)據(jù)類型有兩類,一類是小數(shù),一類是整數(shù)。對(duì)于希望速成的初學(xué)者來說,整數(shù)用int表示,小數(shù)用double表示,當(dāng)然編程中一般把小數(shù)叫做浮點(diǎn)數(shù)。
這時(shí)就有一個(gè)尖銳的問題,"Hello World"又是個(gè)啥?
好吧你贏了,那就再加一種數(shù)據(jù)類型,就是字符串。而且字符串和數(shù)值還有區(qū)別,小數(shù)和整數(shù)盡管類型不同,但總可以互相計(jì)算的,比如小數(shù)和整數(shù)相加,最后得到的是個(gè)整數(shù);但小數(shù)和字符串相加,最后應(yīng)該沒法得到值。
也就是說,四則混合運(yùn)算對(duì)字符串不適用。
你可能不信,于是寫出了這行代碼
Console.WriteLine("Hello" + "World");
好吧你又贏了,+只在高中數(shù)學(xué)中表示加法,在編程語言中只是一個(gè)代碼,既可以將其定義為加法,也可以將其定義為字符串拼接。
有了數(shù)據(jù)類型,就可以定義變量
double square(double x){
return x * x;
}
double a = 1.5;
int b = 2;
Console.WriteLine(square(a)+b);
最后命令行輸出4.25,square(a)是對(duì)浮點(diǎn)數(shù)做平方,然后輸出了浮點(diǎn)數(shù),而b是整型,根據(jù)輸出結(jié)果可以直到,浮點(diǎn)型和整型相加,最后的結(jié)果仍然是浮點(diǎn)型。
布爾類型和判斷
數(shù)值計(jì)算和解析計(jì)算的區(qū)別在于,后者是無限的,而前者是有限的。網(wǎng)上經(jīng)常說π又算到了多少多少位,就講出了這個(gè)區(qū)別。π 顯然是無窮多位的,但計(jì)算機(jī)只能表現(xiàn)出有限的位數(shù),這種位數(shù)的限制,使得整型和浮點(diǎn)型內(nèi)部產(chǎn)生了分 裂。
眾所周知,計(jì)算機(jī)操作的是二進(jìn)制的邏輯電路,用32位二進(jìn)制,可以表示的最大整數(shù)就是232=4294967296,要是還想考慮一下0,那就再要減一,要是再考慮負(fù)數(shù),就要再減半。
C#中提供了多種位數(shù)的整型和浮點(diǎn)型,其中整型又包括有符號(hào)和無符號(hào)兩種,所謂有符號(hào),就是有正有負(fù);無符號(hào)就是0和正整數(shù)。比如double就是64位浮點(diǎn)型;int是32位有符號(hào)整型;uint是32位無符號(hào)整型。
當(dāng)數(shù)據(jù)位數(shù)降到1位時(shí),一位的二進(jìn)制就只剩下兩個(gè)值0和1,仿佛是一個(gè)開關(guān),于是量變引起了質(zhì)變,布爾類型誕生了。
這個(gè)時(shí)候,0 00和1 11被賦予了非常重要的現(xiàn)實(shí)意義,用于表示無或有,以及錯(cuò)和對(duì),即false和true。
有了對(duì)錯(cuò),就可以判斷,在幾乎所有編程語言中,都用if表示判斷
void trueOrFalse(bool c){
if(c){
Console.WriteLine("你是對(duì)的");
}
else{
Console.WriteLine("我是錯(cuò)的");
}
}
trueOrFalse(true);
運(yùn)行之后,輸出你是對(duì)的。
拋開if不談,這個(gè)函數(shù)也和之前定義的不太一樣,這個(gè)函數(shù)沒有返回值,所以其輸出的數(shù)據(jù)類型為void。
大多數(shù)人接觸if時(shí)的學(xué)習(xí)案例往往是這個(gè)
void bigOrlittle(int a, int b)
{
if (a > b)
{
Console.WriteLine($"{a}>");
}
else if (a < b)
{
Console.WriteLine($"{a}<");
}
else
{
Console.WriteLine($"{a}=");
}
}
bigOrlittle(3, 5);
//輸出為 3<5
這個(gè)案例給出了完整的判斷語句,if...else if...else,中間的else if可以為無窮多個(gè)。據(jù)說有一款游戲中,堆了一個(gè)19億次判斷的屎山,被坊間傳為笑談。
其中,<是也是一種運(yùn)算符,其輸入為兩個(gè)數(shù)值,輸出為布爾型變量。如果左邊的小于右邊的,就輸出true,否則就輸出false。這類運(yùn)算符被統(tǒng)稱為條件運(yùn)算符,包括全等判斷==,不等判斷!=以及>,<,>=,<=。
數(shù)組和for循環(huán)
前文提到,除了數(shù)值之外,字符串是另外一種數(shù)據(jù)類型,這兩種類型之間并不能直接運(yùn)算。而且前文又提到,數(shù)值類型和二進(jìn)制的位數(shù)是息息相關(guān)的,32位整型能表示的最大數(shù)值不超過232。
但字符串似乎并沒有這種限制,只要計(jì)算機(jī)內(nèi)存扛得住,似乎可以在雙引號(hào)中寫入任意長(zhǎng)度的字符串。這種奇怪的特性表明,字符串并不是一種單純的數(shù)據(jù)類型,而是由字符組成的串。
所謂字符,就是諸如'a','b','c'這樣單個(gè)的字母或者文字,它們和數(shù)值類型都要受到二進(jìn)制位數(shù)的限制。C#中的char類型由兩個(gè)字節(jié)組成,也就是16位二進(jìn)制,最多可以涵蓋65536個(gè)單字。而字符串,就是由這一個(gè)個(gè)字符拼接而成。
推此及彼,數(shù)值類型也應(yīng)該有類似的串的結(jié)構(gòu),此即數(shù)組,其聲明方式如下
int[] arr = new int[5]; Console.WriteLine(arr); // System.Int32[]
int[]表示整型數(shù)組,new表示創(chuàng)建一個(gè)數(shù)組的實(shí)例,后面int[5]表似乎這個(gè)數(shù)組的長(zhǎng)度為5。最后調(diào)用Console.WriteLine來打印arr,結(jié)果并沒有輸出數(shù)組的內(nèi)容。
先不考慮數(shù)組是否支持用WriteLine,arr在創(chuàng)建出來之后,其實(shí)并沒有為其賦值,所以非要輸出,輸出為空也是符合邏輯的。
數(shù)組賦值的方法也很便捷,arr[0]=1表示將arr中的第0個(gè)值賦為1。千萬要注意,C#中,索引序號(hào)是從0開始的。
接下來又出現(xiàn)了一個(gè)嚴(yán)重的問題,如果要?jiǎng)?chuàng)建一個(gè)有1000個(gè)元素的數(shù)組,那給數(shù)組初始化不得寫1000行?要是按行數(shù)算工資的話老板不得虧死?
所以接下來就引入另一個(gè)概念,for循環(huán),如下
int[] arr = new int[5];
for (int i = 0; i < 5; i = i+1)
{
arr[i] = i * i;
}
在(int i=0; i<5; i=i+1)中,int i聲明了一個(gè)變量,i=0表示這個(gè)變量從0開始,i=i+1表示每次循環(huán),i都變成i+1,i<5表示只有在i<5的情況下才執(zhí)行循環(huán)。
由于i=i+1這種寫法過于繁瑣,C#提供了自增運(yùn)算符i++,再意義上與i=i+1等價(jià)。
花括號(hào)中是循環(huán)體,對(duì)數(shù)組arr逐個(gè)進(jìn)行賦值。唯一比較可惜的是,Console.WriteLine并不能直接把數(shù)組中的內(nèi)容打印出來,為了打印數(shù)組中的內(nèi)容,還要再寫個(gè)循環(huán)
for (int i = 0; i < 5; i++)
{
Console.WriteLine(arr[i])
}
當(dāng)然,對(duì)于數(shù)組操作,這里其實(shí)推薦這種寫法
foreach (var e in arr)
{
Console.WriteLine(e);
}
foreach表示遍歷數(shù)組中的所有元素,再(var e in arr)中,var表示自動(dòng)判定數(shù)組內(nèi)元素的數(shù)據(jù)類型,e則為遍歷到的arr中的元素創(chuàng)建一個(gè)臨時(shí)的變量。這樣就把a(bǔ)rr中所有的元素打印出來了。
0
1
4
9
16
當(dāng)然,圈子兜了這么遠(yuǎn),主要目的并不是初始化數(shù)組,而是為了講述for循環(huán),因?yàn)閿?shù)組初始化有更加便捷的方式
int[] arr = {0,1,4,9,16}
while循環(huán)與跳出
其實(shí)有了for循環(huán)就已經(jīng)可以解決幾乎所有循環(huán)問題了,但從邏輯上來說,for循環(huán)并不存粹,里面加入了大量私貨。畢竟對(duì)循環(huán)而言,其實(shí)只需要一個(gè)循環(huán)條件就可以了,符合這個(gè)條件就循環(huán),不符合就跳出,while就是干這個(gè)的,其使用方法與if十分相似
double a = 1.5
while(a*a<100){
a++;
Console.WriteLine(a);
}
但while中沒有else,也就是說,只能判斷一個(gè)條件,如果有多個(gè)跳出條件,可以用break。
while(a*a<100){
a++;
if(a>5){
//當(dāng)a>5時(shí),跳出循環(huán)
break;
}
Console.WriteLine(a);
}
另一種情況是,如果并不想把所有a都打印出來,則可以通過continue來跳過某次循環(huán),下面打印出平方小于100的所有奇數(shù)
a = 0
while(a*a<100){
a++;
if(a%2==0){
//當(dāng)a>5時(shí),跳出循環(huán)
continue;
}
Console.WriteLine(a);
}到此這篇關(guān)于C#零基礎(chǔ)開發(fā)中最重要的概念總結(jié)的文章就介紹到這了,更多相關(guān)C#開發(fā)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實(shí)現(xiàn)鼠標(biāo)拖拽無邊框浮動(dòng)窗體的方法
一般情況下,在標(biāo)題欄中按住鼠標(biāo)左鍵不放即可實(shí)現(xiàn)拖動(dòng)操作,當(dāng)做浮動(dòng)窗體時(shí),如果包含窗體邊框,那么界面給使用者的感覺將很不友好,因此本文給大家介紹了C#實(shí)現(xiàn)鼠標(biāo)拖拽無邊框浮動(dòng)窗體的方法,感興趣的朋友可以參考下2024-04-04
C#實(shí)現(xiàn)將CSV轉(zhuǎn)為XLSX文件
Microsoft?Excel的XLSX格式以及基于文本的CSV(逗號(hào)分隔值)格式,是數(shù)據(jù)交換中常見的文件格式,本文主要介紹了如何在C#中以編程的方式將CSV文件轉(zhuǎn)化為XLSX?文件,需要的可以參考下2024-03-03
C#實(shí)現(xiàn)獲取程序路徑方法小結(jié)
這篇文章主要介紹了C#實(shí)現(xiàn)獲取程序路徑方法,實(shí)例分析了C#獲取文件路徑的各種常用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08
Unity 實(shí)現(xiàn)刪除missing腳本組件
這篇文章主要介紹了Unity 刪除missing腳本組件的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04
C#遞歸實(shí)現(xiàn)將一整數(shù)逆序后放入一數(shù)組中
這篇文章主要介紹了C#遞歸實(shí)現(xiàn)將一整數(shù)逆序后放入一數(shù)組中,是遞歸算法的一個(gè)簡(jiǎn)單應(yīng)用,需要的朋友可以參考下2014-10-10

