第二章--C#文法基礎:
一,注釋語句
/*注釋語句包含在"反斜杠* "和" *反斜杠"中,
或者兩個反斜杠和換行符之中,
或者三個反斜杠和換行符之中(可以被VS自動識别為檔案注釋以提取)
要注意注釋中的\,該續行符會把下一行連上來一起注釋掉出錯。*/
static void Main(string[] args)
{//語句塊包含在{}中
int MyInterger;//語句以;結束
string MyString;///忽略空白字元(空格/回車/TAB)
MyInterger = 17; }
//要注意防止注釋嵌套出錯,可用#if,#endif預處理語句。
二,資料類型
1,基本型/内置型 使用者自定義型
A,内置類型:CS使用.net FrameWork
?
庫中的資料類型
sbyte = System.SByte,...
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cGcq5SM4kTM0UTOjBzYjhjM3MTZyYzX0ITOzMTM5IzLcdDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.jpg)
<span style="font-size:12px;color:#000000;">//結構類型
using System;
struct Student
{
public int no;
public string name;
public string phone;
public Student(int stu_no, string stu_name, string stu_phone)//構造函數,作為結構體的構造函數,要麼給變量全部指派,要麼保持預設
{
no = stu_no;
name = stu_name;
phone = stu_phone;
}
}
class douge
{
public static void Main()
{
Student stu=new Student(945546,"zhangsan","12035884");
Console.WriteLine(stu.no);
Console.WriteLine(stu.name);
Console.WriteLine(stu.phone);
//Console.Read();
}
}</span>
<span style="color:#000000;">
//使用枚舉
using System;
class enumtest
{
enum color : long { Red = 56565654L, Green, Yellow, Blue = 355L };//聲明枚舉的元素為LONG型
public static void Main()
{
long a = (long)color.Green;
long b = (long)color.Blue;
Console.WriteLine("Green={0}",a);
Console.WriteLine("Bule={0}", b);
Console.Read();
}
}
</span>
<span style="color:#000000;">
//數組的引用
using System;
class test
{
static void Main()
{
int i,j;
int[] arr = new int[5];
for (i = 0; i < arr.Length; i++)
{
arr[i] = i<<4;
}
for (j = 0; j < arr.Length; j++)
{
Console.WriteLine("arr[{0}]={1}", j, arr[j]);
}
Console.Read();
}
}</span>
<span style="color:#000000;">
//交錯數組的舉例
using System;
class ArrayTest
{
static void Main()
{
int [][] arr=new int [2][];
arr[0]=new int [5] {1,3,5,7,9};
arr[1]=new int [5]{2,4,6,8,10};
for(int i=0;i<arr.Length;i++)
{
System.Console.Write("Element({0}):",i);
for(int j=0;j<arr[i].Length;j++)
{
Console.WriteLine("{0}{1}",arr[i][j],j==(arr[i].Length-1)?"":"");
}
System.Console.WriteLine();
}
Console.Read();
}
}</span>
<span style="color:#000000;">
//ArrayList類的使用
using System;
using System.Collections;
class HE
{
static void Main()
{
ArrayList books = new ArrayList();
books.Add("C#程式設計!");
books.Add("面向對象程式設計思想");
Console.WriteLine("count:{0}", books.Count);
Console.WriteLine("capacity:{0}", books.Capacity);
Console.WriteLine();
Console.WriteLine("使用疊代器通路集合中的對象");
foreach (object book in books)
{
Console.WriteLine(book);
}
Console.WriteLine();
Console.WriteLine("使用For循環通路集合中的元素");
{
for (int i = 0; i < books.Count; i++)
{
Console.WriteLine(books[i]);
}
}
Console.Read();
}
}</span>
B,使用者定義類型包括:
類類型(class)
結構類型(struct)
接口類型(interface)
2,值類型(Value Types)和引用類型(Reference Types)
A,值類型:記憶體順序配置設定在棧中。他們包括:所有基本或内置類型(不包括string類型)、結構類型、枚舉類型(enum type)
B,引用類型:記憶體非線性配置設定在堆中,當它們不再被使用時CS通過垃圾收集器自動釋放記憶體(C++用delete)。它們使用new運算符來建立。
引用類型包括:類類型、接口類型、象數組這樣的集合類型類型、字串類型、枚舉類型
結構型适于快速通路和擁有少量成員的資料類型。如果涉及量較多,你應該建立一個類來實作他。
3,資料類型轉換
隐式轉換:從低精度的轉換到高精度的,是以不可能轉換到char;另外可以把0隐式轉換成枚舉型,其他整數不行。
顯式轉換
三,變量:
1,普通變量:
(1),命名規則:字母或_或@ + 字母或_或數字 (/用于轉義,@用于逐個轉義指定,@常用于保留關鍵字前以保持與其他語言相容)
(2),聲明變量: 變量類型 變量名
變量指派:變量 = 要賦的值
C#變量被通路之前必須被初始化;否則編譯時會報錯。是以,不可能通路一個未初始化變量(如不确定的指針、超出數組邊界的表達式)。變量在使用前最好習慣是要先聲明和初始化。
(3)C#中沒有全局的的變量或全局函數,全局方式的操作是通過靜态函數和靜态變量來實作的。
int i;string text;//在循環外未初始化for (i = 0;i<10;I++){text = "Line" + Convert.ToString(i);//在循環中未初始化,在退出循環的時候會丢失值,再引用就出錯。Console.WriteLine("{0},text);}Console.WriteLine("Last txet output in loop:{0},text);//出錯。改正方法是在循環外初始化:string text="";
(4)命名約定:簡單的用camelCase,複雜的用PascalCase
?
(5)變量的七種類型:
class A{public static int x;//靜态變量,存在期從類裝載直到該程式結束。int y;//非靜态變量,或執行個體變量,從類執行個體建立到執行個體空間釋放。/*v[0]是數組元素,a是值參數,b是引用參數,c是輸出參數 */void F(int[] v,int a,ref int b,out int c){int i = 1;//局部變量,不會被初始化c = a + b++;//}}
2,枚舉
enum 枚舉名:枚舉值類型(預設是int,預設指派0,1,2...) { 枚舉值1=..., 枚舉值2=..., 枚舉值3,//不指派的話,預設為最後一個明确具體值的值+1 ... } 枚舉名 變量名=枚舉名.枚舉值namespace
3,結構
struct 結構名: { 通路方式1 變量類型1 變量名1;//通路方式public/private 通路方式2 變量類型2 變量名2; ... } 結構名 結構變量名; 結構變量名.枚舉值=...;
4,一維數組
變量類型[] 數組名 = new 變量類型[元素個數]{元素0,元素1,元素2...}//元素個數必須是整數或者整數常量,而且必須與後面的元素列值個數相同,否則出錯。元素個數的new聲明和後面的元素列值可以隻選一個,就能聲明并初始化數組。
周遊方法
A,For循環到.Lengthfor(i=0,i<friendNames.Length,i++){Console.WriteLine(friendNames[i]);}B,Foreach進行隻讀通路foreach(string listName in friendNames){Console.WriteLine(listName);}
5,二維數組(多元)
變量類型[,] 數組名 = new 變量類型[一維元素個數,二維元素個數]{{元素00,元素01,元素02...},{元素10,元素11,元素12...}...}
6,直角數組(交錯數組,數組中的數組)
七,條件語句
A,If語句:通用判斷
If (條件1) 代碼1; Else 代碼2; If (條件1) {} Else {}
B,Switch語句:用于同條件多結果判斷
Switch (條件) { Case 結果1: 代碼1; break; Case 結果2: 代碼2; break; Case 結果3: 代碼3; goto Case 結果2;//此時Case..相當于一個Label Case 結果4: 代碼4; Return; Case 結果5: Case 結果6: Case 結果7: 代碼567;//隻要滿足上面三個Case之一就執行。 break; ... Default: 代碼; break; }
C,三元運算語句:(條件)?True結果:False結果
常用于簡單指派語句:string myString = (myInteger<10)?"Less than 10":"Great than or equal to";
或者用于簡單格式化文本語句:Console.WriteLine
?("I am {0} year{1} old.",myinteger,myinteger==1?"":"s");
八,循環語句:
A,Do...While: 當條件為True時循環。
Do {...} While(條件);//分号不可少
B,While...: 當條件為True 時循環。
While(條件) {...}
C,For...: 使用計數器循環。
For (變量;條件;操作)//可以在此時聲明變量,但作用域就僅限于循環内了。 {... Break;//跳出整個循環 Return; Continue;//中止目前循環,繼續下一個循環 Goto 标簽;//禁止從循環外部用goto跳入循環内部 }
九,函數
A,函數定義:static 傳回值類型/void 函數名(參數類型1 參數1,參數類型2 參數2,...){...return 傳回值;//return必須在函數結束前被處理,不能跳過//return ;//當用于void時用不帶傳回值的return來中止函數。}
B,參數數組:
static int sumVals(params int[] vals){int sum = 0;foreach(int val in vals){sum+=val;}return sum;}static void Main(string[] args){int sum = sumVals(1,5,2,9,8);Console.WriteLine("Summed Values = {0}",sum);}C,值傳遞參數/引用傳遞參數/out輸出參數static void showDouble(ref int val)//引用傳遞參數{val*=2;Console.WriteLie("val doubled = {0}",val);}static void showDouble2(int val)//值傳遞參數{val*=2;Console.WriteLine("val doubled = {0}",val);}static void showDouble3(int val,out int valIndex)//out輸出參數{val*=2;valIndex++;Console.WriteLine("val doubled = {0}",val);}int myNmuber = 5;showDouble(ref myNumber);//引用傳遞參數,會改變myNumber值,是以要求myNumber必須不是常量或者未初始化的變量。showDouble2(myNumber);//值傳遞參數,不會改變myNumber值int valindex;//out輸出參數,不用初始化,初始化了也會在函數開始執行時丢失值。showDouble3(myNumber,out valIndex);
D,全局變量
static/const 變量名//const定義的全局變量是隻讀的
當全局變量與局部變量同名時,局部變量優先,要用類似class1.myString來引用全局變量。
E,Main()函數;
static void Main()static void Main(string[] args)//args是函數指令行參數static int Main()//傳回一個表示函數終止狀态的int值static int Main(string[] args)//傳回一個表示函數終止狀态的int值
F,結構中的函數
G,同名函數的重載:同名,簽名不同,系統自動識别使用哪個函數
H,委托:用于把引用存儲為函數以靈活調用函數
十,面向對象基礎
十一,類
1,類的定義
class 類名{//類成員}internal/publicsealed/abstract
十和,接口
interface IMyInterface{//接口成員}