C#筆記——基礎篇
.Net FrameWork框架提供了一個穩定的運行環境,;來保障我們.Net平臺正常的運轉
(.net開發的internet應用程序叫ASP.NET應用程序)
(.net可以做手機開發,Wp8,目前在中國剛剛起步,也許 這是一個機會)
Wp8已經來襲,要善于抓住機會,敢于嘗試.----掌握分寸
(C/S是Client/Server的縮寫??蛻舳诵枰惭b專用的客戶端軟件。 Winform)
(B/S是Brower/Server的縮寫,客戶機上只要安裝一個瀏覽器Internet應用程ASP.NET
)
IDE指的就是我們的開發工具。
(.net的IDE就是vs2010、vs2012、vs2013
注:MSDN(我們的百科全書,幫助)神器
1
1)、啟動VS
a、雙擊圖標
b、調出cmd,輸入 devenu
2)、解決方案、項目及類之間的關系
解決方案:公司
項目:部門
類:員工
在視圖里面找解決方案資源管理器
3)、PRogram中的各個組成部分
引用命名空間:
京東----》京東在線商城項目---》顧客類
淘寶----》淘寶在線商城項目---》顧客類
高端霸氣公司----》老趙牛X項目---》顧客類
4)、方法或者函數
Main函數是我們程序的主入口,你寫的代碼如果想要被執行的話,必須寫在Main函數當中。
5)、
.sln:解決方案文件,里面包含著整個解決方案的信息,可以雙擊運行。
.csproj:項目文件,里面包含著這個項目的信息,可以雙擊運行。
2、書寫代碼需要注意的地方:
1)、代碼中出現的所有標點都是英文半角 shift鍵快速切換中文半角和英文半角
shift+空格 切換全角/半角
2)、在c#代碼中,每行代碼的結束,我們都以分號結束,注意:這個分號也是英文半角的分號。
3)、Console.WriteLine("要打印的內容");
Console.ReadKey();
a、暫停當前程序,等待用戶按下任意鍵繼續,按下的任意鍵將顯示在我們的控制臺當中
3、運行程序的兩種方式
1)、點擊綠色的啟動按鈕
2)、使用快捷鍵F5
4、生成解決方案
幫助我們排查語法錯誤。
5
1)、如果你的代碼中出現了紅色的波浪線,意味著你的代碼中出現了
語法錯誤。
2)、如果你的代碼中出現了綠色的波浪線,說明你的代碼語法并沒有錯誤,
只不過提示你有可能會出現錯誤,但是不一定會出現錯誤。警告線
1)、注銷
2)、解釋
3)、三種注釋方式
– //單行注釋
– /* */多行注釋
– ///
– ///文檔注釋
– ///
用來在計算機當中存儲數據。如果你要是用變量的話,應該要先聲明再賦值再使用。
存儲整數100
數據類型:整數
在內存中開辟的空間應該是整數類型 int
存儲變量的語法:
變量類型 變量名;
變量名=值;
"="號:在這并不表示等于的意思,而是賦值的意思,表示把等號右邊的值賦值給等號左邊的變量。
聲明并且給變量賦值的簡寫形式:
變量類型 變量名=值;
1)、整數類型:int 只能存儲整數,不能存儲小數。
2)、小數類型:double 既能存儲整數,也能存儲小數,小數點后面的位數 15~16位。
3)、金錢類型:decimal:用來村粗金錢,值后面需要加上一個m.
4)、字符串類型:string,用來存儲多個文本,也可以存儲空,字符串類型的值需要被 雙引號引來,
這個雙引號必須是英文半角狀態下的雙引號
5)、字符類型:char,用來存儲單個字符,最多、最少只能有一個字符,不能存儲空。
字符類型的值需要用 單引號因起來。英文半角狀態下的單引號。
****首先要保證的就是這個變量的名字要有意義。
1 現階段給變量起名字的時候都以字母開頭
2 后面可以跟任意“字母”、數字、下劃線.
注意:
1)你起的變量名不要與c#系統中的關鍵字重復.
2)在c#中,大小寫是敏感的. HTML
3)同一個變量名不允許重復定義(先這么認為,不嚴謹)
給變量起名字的時候要滿足兩個命名規范:
1、Camel 駱駝命名規范。要求變量名首單詞的首字母要小寫,其余每個單詞的首字母要大寫。
多用于給變量命名。
2、Pascal 命名規范:要求每個單詞的首字母都要大寫,其余字母小寫。多用于給類或者方法命名。
HighSchoolStudent
highSchoolStudent
1)、算數運算符
+,-,*,/,%
2)、賦值運算符
=:表示賦值的意思,表示把等號右邊的值,賦值給等號左邊的變量。
由等號連接的表達式稱之為賦值表達式。
注意:每個表達式我們都可以求解除一個定值,對于賦值表達式而言,等號左邊的變量的值,
就是整個賦值表達式的值。
int number=10;
+號
1)、連接:當+號兩邊有一邊是字符串的時候,+號就起到連接的作用。
2)、相加:兩邊是數字的時候
占位符
使用方法:先挖個坑,再填個坑。
使用占位符需要注意的地方:
1)、你挖了幾個坑,就應該填幾個坑,如果你多填了,沒效果。
如果你少填了,拋異常。
2)、輸出順序:按照挖坑的順序輸出。
異常是指:語法上并沒有任何錯誤,只不過在程序運行的期間,由于某些原因出現了問題,
使程序不能再正常的運行。
轉義符指的就是一個'/'+一個特殊的字符,組成了一個具有特殊意義的字符。
/n:表示換行
/":表示一個英文半角的雙引號
/t:表示一個tab鍵的空格
/b:表示一個退格鍵,放到字符串的兩邊沒有效果。
/r/n:windows操作系統不認識/n,只認識/r/n
//:表示一個/
@符號
1、取消/在字符串中的轉義作用,使其單純的表示為一個'/'
2、將字符串按照編輯的原格式輸出
1)隱式類型轉換:
我們要求等號兩遍參與運算的操作數的類型必須一致,如果不一致,滿足下列條件會發生
自動類型轉換,或者稱之為隱式類型轉換。
兩種類型兼容
例如:int 和 double 兼容(都是數字類型)
目標類型大于源類型
例如:double > int 小的轉大的
2)顯示類型轉換:
1、兩種類型相兼容 int--double
2、大的轉成小的 double----int
語法:
(待轉換的類型)要轉換的值;
總結:
自動類型轉換:int---->double
顯示類型轉換:double--->int
控制小數點位數的:{0:0.00}:小數點后兩位
3)Convert類型轉換
1、類型如果相兼容的兩個變量,可以使用自動類型轉換或者強制類型轉換,
但是,如果兩個類型的變量不兼容,比如 string與int或者string 與double,
這個時候我們可以使用一個叫做Convert的轉換工廠進行轉換。
注意:使用Convert進行類型轉換,也需要滿足一個條件:
面兒上必須要過的去。
int number = Convert.ToInt32(Console.ReadLine());
4)int.parse Convert的內部方法,比其效率高一點,不過還會拋異常
嘗試著將一個字符串轉換成int類型。
int number= int.Parse(Console.ReadLine());
5) int.TryParse是方法,需要有參數和返回值,如果失敗,不會拋出異常
int num=0;
bool b=int.TryParse(“3”, out num)//如果可以轉換成功,b=true,num=3;否則,b=false;num=0;
1、算數運算符
1.
++:分為前++和后++,不管是前++還是后++,最終的結果都是給這個變量加一。
區別表現表達式當中,如果是前++,則先給這個變量自身加一,然后帶著這個加一后的值去參與運算。
如果是后++,則先拿原值參與運算,運算完成后,再講這個變量自身加一。
--:同上。
2、
對于向加加或者減減這樣只需要一個操作數就能完成的運算,我們稱之為一元運算符。
+ - * / % 對于這些需要兩個或以上才能完成運算的操作符,我們稱之為二元運算符。
一元運算符的優先級要高于而元運算符。
如果在一個表達式當中,既有一元運算符,又有二元運算符,我們首先計算一元運算符。
int number=10;
int result=10 + ++number;
2、關系運算符
>、 <、 >=、 <=、 ==、 !=
關系運算符是用來描述兩個事物之間的關系
由關系運算符連接的表達式稱之為關系表達式。
3、bool類型
在c#中我們用bool類型來描述對或者錯。
bool類型的值只有兩個 一個true 一個false
4、邏輯運算符
&& 邏輯與
||邏輯或
!邏輯非
又邏輯運算符連接的表達式叫做邏輯表達式
邏輯運算符兩邊放的一般都是關系表達式或者bool類型的值。
5>3 &&true
3>5||false
!表達式
邏輯表達式的結果同樣也是bool類型
5、復合賦值運算符
int number=10;
+= :
number+=20;
number=number+20;
-=
number-=5;
number=number-5;
*=
number*=5;
number=number*5;
/=
%=
6.三元表達式
語法:
表達式1?表達式2:表達式3;
表達式1一般為一個關系表達式。
如果表達式1的值為true,那么表達式2的值就是整個三元表達式的值。
如果表達式1的值為false,那么表達式3的值就是整個三元表達式的值。
注意:表達式2的結果類型必須跟表達式3的結果類型一致,并且也要跟整個三元表達式的結果類型一致。
1.
順序結構:程序從Main函數進入,從上到下一行一行的執行,不會落下任何一行。
if語句:
語法:
if(判斷條件)
{
要執行的代碼;
}
判斷條件:一般為關系表達式或者bool類型的值。
執行過程:程序運行到if處,首先判斷if所帶的小括號中的判斷條件,
如果條件成立,也就是返回true,則執行if所帶的大括號中的代碼,
如果判斷條件不成立,也就是返回一個false。則跳過if結構,繼續向下執行。
if結構的特點:先判斷,再執行,有可能一行代碼都不執行
用于一種情況的判斷。
2.
分支結構: if-else
語法:
if(判斷條件)
{
執行的代碼;
}
else
{
執行的代碼
}
執行過程:程序執行到if處,首先判斷if所帶的小括號中的判斷條件是否成立,
如果成立,也就是返回一個true,則執行if所帶的大括號中的代碼,
執行完成后,跳出if-else結構。
如果if所帶的小括號中的判斷條件不成立,也就是返回一個false,
則跳過if語句,執行else所帶的大括號中的語句,執行完成后,跳出if-else結構。
if-else特點:先判斷,再執行,最少都要執行一條代碼。
用于兩種情況的判斷
注意:else永遠跟離它最近的那個if配對
3
選擇結構:if else-if switch-case
if else-if
作用:用來處理多條件的區間性的判斷。
語法:
if(判斷條件)
{
要執行的代碼;
}
else if(判斷條件)
{
要執行的代碼;
}
else if(判斷條件)
{
要執行的代碼;
}
else if(判斷條件)
{
要執行的代碼;
}
........
else
{
要執行的代碼;
}
執行過程;程序首先判斷第一個if所帶的小括號中的判斷條件,如果條件成立,也就是返回一個true,
則執行該if所帶的大括號中的代碼,執行完成后,立即跳出if else-if結構。
如果第一個if所帶的判斷條件不成立,也就是返回一個false,則繼續向下進行判斷,依次的判斷每一個if所帶
的判斷條件,如果成立,就執行該if所帶的大括號中的代碼,如果不成立,則繼續向下判斷,
如果每個if所帶的判斷條件都不成立,就看當前這個if else-if結構中是否存在else。
如果有else的話,則執行else中所帶的代碼,如果沒有else,則整個 if-else if神馬都不做。
else可以省略。
switch-case
用來處理多條件的定值的判斷。
語法:
switch(變量或者表達式的值)
{
case 值1:要執行的代碼;
break;
case 值2:要執行的代碼;
break;
case 值3:要執行的代碼;
break;
..........
default:要執行的代碼;
break;
}
執行過程:程序執行到switch處,首先將括號中變量或者表達式的值計算出來,
然后拿著這個值依次跟每個case后面所帶的值進行匹配,一旦匹配成功,則執行
該case所帶的代碼,執行完成后,遇到break。跳出switch-case結構。
如果,跟每個case所帶的值都不匹配。就看當前這個switch-case結構中是否存在
default,如果有default,則執行default中的語句,如果沒有default,則該switch-case結構
什么都不做。
4
循環結構:while do-while for
while循環:
while(循環條件)
{
循環體;
}
執行過程:程序運行到while處,首先判斷while所帶的小括號內的循環條件是否成立,
如果成立的話,也就是返回一個true,則執行循環體,執行完一遍循環體后,再次回到
循環條件進行判斷,如果依然成立,則繼續執行循環體,如果不成立,則跳出while循環。
在while循環當中,一般總會有那么一行代碼,能夠改變循環條件,使之終有一天不再成立,
如果沒有那么一行代碼能夠改變循環條件,也就是循環條件永遠都成立,我們稱之這種循環
叫做死循環。
最簡單的最常用的死循環:
while(true)
{
}
特點:先判斷,再執行,有可能一遍循環都不執行。
do-while循環。
語法:
do
{
循環體;
}while(循環條件);
執行過程:程序首先會執行do中的循環體,執行完成后,去判斷do-while循環的循環條件,
如果成立,則繼續執行do中的循環體,如果不成立,則跳出do-while循環。
特點:先循環,再判斷,最少執行一遍循環體。
for循環
語法:
for(表達式1;表達式2;表達式3)
{
循環體;
}
表達式1一般為聲明循環變量,記錄循環的次數(int i=0;)
表達式2一般為循環條件(i<10)
表達式3一般為改變循環條件的代碼,使循環條件終有一天不再成立(i++)。
執行過程:程序首先執行表達式1,聲明了一個循環變量用來記錄循環的次數,
然后執行表達式2,判斷循環條件是否成立,如果表達式2返回的結果為true,
則執行循環體。當執行完循環體后,執行表達式3,然后執行表達式2繼續判斷循環條件是否成立,
如果成立則繼續執行循環體,如果不成立,則跳出for循環。
break
1)、可以跳出switch-case結構。
2)、可以跳出當前循環。
break一般不單獨的使用,而是跟著if判斷一起使用,表示,當滿足某些條件的時候,就不再循環了。
Continue
立即結束本次循環,判斷循環條件,如果成立,則進入下一次循環,否則退出循環.
1.try-catch
.我們在程序中經常會出現各種各樣的異常,你如果想要你的程序變得堅強一些。
在你的代碼中應該經常性的使用try-catch來進行異常捕獲。
哪行代碼有可能出現異常,你就踹它一腳。
語法:
try
{
可能會出現異常的代碼;
....
...
...
}
//try和catch之間不能有其他的代碼
catch
{
出現異常后要執行的代碼;
}
執行過程:如果try中的代碼沒有出現異常,那么catch中的代碼不會執行。
如果try中的代碼出現了異常,那怕這行出現異常的代碼后面還有一百行都不會執行了,
而是直接跳到catch中執行代碼
2、變量的作用域
變量的作用域就是你能夠使用到這個變量的范圍。
變量的作用域一般從聲明它的那個括號開始到那個括號所對應的結束的括號結束。
在這個范圍內,我們可以訪問并使用變量。超出這個范圍就訪問不到了
1)、寫完一段程序后,想看一下這段程序的執行過程。
2)、當你寫完這段程序后,發現,程序并沒有按照你想象的樣子去執行。
調試方法:
1)、F11逐語句調試(單步調試)
2)、F10逐過程調試
3)、斷點調試
聲明的常量的語法:
const 變量類型 變量名=值;
什么時候會用到常量?
語法:
[public] enum 枚舉名
{
值1,
值2,
值3,
........
}
public:訪問修飾符。公開的公共的,哪都可以訪問。
enum:關鍵字,聲明枚舉的關鍵字
枚舉名:要符合Pascal命名規范
將枚舉聲明到命名空間的下面,類的外面,表示這個命名空間下,所有的類都可以使用這個枚舉。
枚舉就是一個變量類型 ,int--double string decimal.
只是枚舉聲明、賦值、使用的方式跟那些普通的變量類型不一樣。
我們可以將一個枚舉類型的變量跟int類型和string類型互相轉換。
枚舉類型默認是跟int類型相互兼容的,所以可以通過強制類型轉換的語法互相轉換。
當轉換一個枚舉中沒有的值的時候,不會拋異常,而是直接將數字顯示出來。
枚舉同樣也可以跟string類型互相轉換,如果將枚舉類型轉換成string類型,則直接調用ToString().
如果將字符串轉換成枚舉類型則需要下面這樣一行代碼:
(要轉換的枚舉類型)Enum.Parse(typeof(要轉換的枚舉類型),"要轉換的字符串");
如果轉換的字符串是數字,則就算枚舉中沒有,也會不會拋異常。
如果轉換的字符串是文本,如果枚舉中沒有,則會拋出異常。
所有的類型都能夠轉換成string類型,調用ToString()。
可以幫助我們一次性聲明多個不同類型的變量。
語法:
[public] struct 結構名
{
成員;//字段
}
變量在程序運行期間只能存儲一個值,而字段可以存儲多個值。
一次性存儲多個相同類型的變量。
語法:
數組類型[] 數組名=new 數組類型[數組長度];
***數組的長度一旦固定了,就不能再被改變了
冒泡排序:就是將一個數組中的元素按照從大到小或者從小到大的順序進行排列。
int[] nums={9,8,7,6,5,4,3,2,1,0}; 0 1 2 3 4 5 6 7 8 9
第一趟比較:8 7 6 5 4 3 2 1 0 9 交換了9次 i=0 j=nums.Length-1-i
第二趟比較:7 6 5 4 3 2 1 0 8 9 交換了8次 i=1 j=nums.Length-1-i
第三趟比較:6 5 4 3 2 1 0 7 8 9 交換了7次 i=2 j=nums.Length-1-i
第四趟比較:5 4 3 2 1 0 6 7 8 9 交換了6次 i=3 j=nums.Length-1-i
第五趟比較:4 3 2 1 0 5 6 7 8 9 交換了5次
第六趟比較:3 2 1 0 4 5 6 7 8 9 交換了4次
第七趟比較:2 1 0 3 4 5 6 7 8 9 交換了3次
第八趟比較:1 0 2 3 4 5 6 7 8 9 交換了2次
第九趟比較:0 1 2 3 4 5 6 7 8 9 交換了1次
for(int i=0;i<number.Length-1;i++)
{
for(int j=0;j<nums.Length-1-i;j++)
{
if(nums[j]>nums[j+1])
{
int temp=nums[j];
nums[j]=nums[j+1];
nums[j+1]=temp;
}
}
}
函數就是將一堆代碼進行重用的一種機制。
1.函數的語法:
[public] static 返回值類型 方法名([參數列表])
{
方法體;
}
public:訪問修飾符,公開的,公共的,哪都可以訪問。
static:靜態的
返回值類型:如果不需要寫返回值,寫void
方法名:Pascal 每個單詞的首字母都大些。其余字母小寫
參數列表:完成這個方法所必須要提供給這個方法的條件。如果沒有參數,小括號也不能省略。
方法寫好后,如果想要被執行,必須要在Main()函數中調用。
方法的調用語法:
類名.方法名([參數]);
***在某些情況下,類名是可以省略的,如果你寫的方法跟Main()函數同在一個類中,這個時候,
類名可以省略。
2.return
1、在方法中返回要返回的值。
2、立即結束本次方法。
3、我們在Main()函數中,調用Test()函數,我們管Main()函數稱之為調用者,
管Test()函數稱之為被調用者。
如果被調用者想要得到調用者的值:
1)、傳遞參數。
2)、使用靜態字段來模擬全局變量。
如果調用者想要得到被調用者的值:
1)、返回值
4、
不管是實參還是形參,都是在內存中開辟了空間的。
5、方法的功能一定要單一。
GetMax(int n1,int n2)
方法中最忌諱的就是出現提示用戶輸入的字眼。
6、out、ref、params
1)、out參數。
如果你在一個方法中,返回多個相同類型的值的時候,可以考慮返回一個數組。
但是,如果返回多個不同類型的值的時候,返回數組就不行了,那么這個時候,
我們可以考慮使用out參數。
out參數就側重于在一個方法中可以返回多個不同類型的值。
2)、ref參數
能夠將一個變量帶入一個方法中進行改變,改變完成后,再講改變后的值帶出方法。
ref參數要求在方法外必須為其賦值,而方法內可以不賦值。
3)、params可變參數
將實參列表中跟可變參數數組類型一致的元素都當做數組的元素去處理。
params可變參數必須是形參列表中的最后一個元素。
7、方法的重載
概念:方法的重載指的就是方法的名稱相同給,但是參數不同。
參數不同,分為兩種情況
1)、如果參數的個數相同,那么參數的類型就不能相同。
2)、如果參數的類型相同,那么參數的個數就不能相同。
***方法的重載跟返回值沒有關系。
8、方法的遞歸
方法自己調用自己。
找出一個文件夾中所有的文件。
新聞熱點
疑難解答