這篇文章是閱讀《C#入門經典(Beginning C#)》書籍裡面的內容,作者Karli Watson.主要包括自己缺乏的一些C#基礎知識和在線筆記使用,文章主要包括C#簡單變量類型和復雜變量類型、命名規則、隱式轉換和顯示轉換、變量字符串處理等內容,都是非常基礎的知識,希望對初學者有所幫助.
簡單類型組成應用程序中基本構件的類型,其中主要有以下類型:
整數類型
sbyte(-128~127之間整數) byte(0~255之間整數) short(-32768~32767之間整數)
ushort(0~65535之間整數) int(4字節,1Byte=8bit)
uint(0~2^32-1之間整數)
long(別名System.Int64) ulong(別名System.UInt64,u是unsigned縮寫,非負數)
浮點數類型
float double(+/- m*2^e) decimal(+/- m*10^e)
3種簡單類型
char(一個Unicode字符,存儲0~65535之間整數)
bool(布爾值true/false) string(一組字符)
C#變量命名規則:變量名的第一個字符必須是字母、下劃線(_)或@,其後的字符可以是字母、下劃線或數字.
命名約定:以前用Hungarian表示法-在變量名上加上小寫形式的前綴,表示其類型,如int型iAge.但由於C# .NET Framework類型復雜,最好根據變量的作用命名它們,目前.NET Framework命名約定PascalCase和camelCase.在名稱中使用大小寫表示它們的用途,由多個單詞組成.
PascalCase指定名稱中每個單詞除第一個字母大寫外,其余小寫.如Age/LastName/WinterOfDiscontent.
camelCase第一個單詞以小寫字母開頭,如age、firstName、timeOfDeath.Microsoft建議對於簡單變量使用camelCase規則,較高級命名使用PascalCase.建議大家在命名時盡量使用這種方法,方便他人閱讀.
注意:下劃線字符分割變量名中單詞如month_time已經被淘汰.
逐字指定字符串:兩個雙引號之間的所有字符都包含在字符串中,包括行末字符和轉義字符.唯一例外是雙引號字符的轉義必須指定,以免結束字符串,可以在該字符串前加@.
逐字指定的字符串在文件名中非常有用(反斜槓字符\),前面做過的工程都涉及磁盤目錄、圖片路徑,可見其用途極為廣泛.即:@"C:\Temp\MyDir\MyFile.doc"="C:\\Temp\\MyDir\\MyFile.doc".
位運算包括&按位與 |按位或 ^按位異或 ~取反 <<左移 >>右移.
隱式轉換:從類型A到類型B的轉換可以在所有情況下進行,執行轉換的規則簡單,可以讓編譯器執行轉換.
顯示轉換:從類型A到類型B的轉換只能在某些情況下進行,轉換的規則比較復雜,應進行某種類型的處理.
其中隱式轉換規則是類型A取值范圍完全包含在類型B的取值范圍內,就可以轉換為類型B.其中byte可以轉換為short/int或float可以轉轉為double.short類型變量可以存儲0~32767而byte可以存儲的最大值255,所以當short轉換byte時如果在256~32767就會出錯.
而顯示轉換即明確要求編譯器把數值從一種數據類型轉換為另一種數據類型,其中編寫代碼的格式隨著轉換方法而異.相當於"我已經知道你對在這麼做提出了警告,但我將對其後果負責".如:
byte n; short m = 7; n = m;
它將會報錯:無法將類型"short"隱式轉換為"byte",存在一個顯示轉換(是否缺少強制轉換?)
此時需要顯示轉換,最簡單的方法是把short變量強制轉換為byte,如n=(byte)m;但需要注意m大於255時會產生數據丟失.
C#提供表達式溢出檢查上下文.使用checked和unchecked關鍵字,如n=checked((byte)m); 當m=281時會報錯信息"算術運算導致溢出".
PS:配置程序表達式都包含checked,右擊"解決方案資源管理器"項目->屬性->生成->高級(Advanced)->選中"檢查運算上溢/下溢",如下圖所示:
另一種顯示轉換方法是使用Convert命令進行顯示轉換,要轉換為int使用Convert.ToInt32(); 轉換為字符串使用Convert.ToString(boolVal);結果輸出"true/false".這種我在使用字符串和設置編碼格式時經常使用.
復雜的變量類型主要包括:
枚舉:變量類型,用戶定義一組可能的離散值,這些值用人們理解的方式使用
結構:合成的變量類型,由用戶定義的一組其他變量類型組成
數組:包含一種類型的多個變量,可以以索引方式訪問各個數值
1.枚舉
有時希望變量提出的是一個固定集合中的值,如week類型存儲星期7天,month存儲12個月份.枚舉允許定義一個類型,其中包含提供的限定值集合中的一個值,如枚舉類型orientation可以存儲north/south/east/west值.枚舉默認類型是int,默認情況每個值都會根據定義的順序(從0開始),自動賦值給對應的基本類型.沒有賦值的任何值都會自動獲得一個初始值,該值比上一個明確聲明的值大1.舉例:
namespace test { //定義枚舉類型並指定每個枚舉的實際值 enum orientation : byte { north = 1, south = 2, east =3, west = 4 } class Program { static void Main(string[] args) { //聲明枚舉類型變量 orientation myDirection = orientation.south; Console.WriteLine("myDirection = {0} {1}",myDirection,(int)myDirection); Console.ReadKey(); } } }
PS:該程序輸出結果為: "myDirection = south 2",實際項目中枚舉應用如在制作畫圖軟件時,自定義枚舉類型UserSelect變量,然後判斷其if (iUserSelect == (int)UserSelect.SELECT)鼠標選擇的是線段、矩形、選中狀態等.而C語言中經常考察枚舉類型的賦值、占用空間地址與結構進行對比等題目.
2.結構
struct,structure縮寫.結構就是由幾個數據組成的數據結構,這些數據可能具有不同的類型.根據這個結構可以定義自己的變量類型.如學生信息(學號+姓名)、存儲一段路程(方向+距離),假定東南西北四個方向.通常方法是定義:orientation myDirection; double myDistance;但是如果存儲多個路徑時定義變量比較麻煩,所以引入結構struct.主要包括結構體數據成員,其格式"
namespace test { //定義枚舉類型並指定每個枚舉的實際值 enum orientation : byte { north, south, east, west } //定義結構類型 struct route { public orientation direction; //方向 public double distance; //距離 } class Program { static void Main(string[] args) { //定義結構類型變量及賦值 route myRoute; myRoute.direction = orientation.west; myRoute.distance = 3.14; Console.WriteLine("direction = {0} distance = {1}", myRoute.direction, myRoute.distance); Console.ReadKey(); } } }
運行結果為"direction = west distance = 3.14".
3.數組
數組是一個變量的索引列表,存儲在數組類型的變量中,存儲類型相同的多個值.與C略有不同,C#聲明數組的方法是:
初始化的兩種方法:
int[] myArray = {1,2,3,4,5};或者int[] myArray = new int[5];
其中new顯示初始化數組大小為5,數組元素賦默認值0.如Console.WriteLine("aArray = {0} , bArray = {1}",aArray[3],bArray[2]);輸出數字"aArray = 4 , bArray = 0".數組索引從0開始,定義Name[5]即索引為0-4.多維數組的聲明如double[,]
length = new double[3,4]表示3*4的數組.這些基礎知識就不在強調了,應該大家都會.
總結:該文章主要是關於C#基礎知識的變量類型和字符串處理,其中主要參照書籍《C#入門經典》,推薦大家學習C#的入門書籍.寫這種文章感覺有時候自己想得挺多的,可能也有點水,但問心無愧.其實我也更願意寫些實際項目的東西或一些項目經驗、項目真正的技術文章,但由於自己的閱歷不夠、項目能力還一般,還需要繼續學習實踐,而這種基礎文章更多是在線筆記!有時寫起來有點淡淡的傷感.希望以後自己能沉下心去真正去學些東西、做些東西,但現在總是有點迷茫,感覺很多東西需要學習又有些乏力,不管如何,先腳踏實地的學些東西,沉浸到代碼中去,慢慢尋找自己的人生路吧!自己給自己鼓勵,如果有錯誤或不足之處還請海涵!有建議或教導也可以提出來分享~
(By:Eastmount 2014-8-23 夜12點 原創CSDN http://blog.csdn.net/eastmount/)