1、資料類型
- 引用類型:string、數組、類
- 值類型:結構體、其他類型
差別:
1、值類型指派,是變更資料;引用類型指派,是變更位址指向。
2、值類型資料存儲在棧空間:由系統配置設定、自動回收,較快
3、引用類型資料存儲在堆空間,位址存在棧空間:需要手動申請、釋放,較慢
4、string特殊,指派時具備值類型的特征。
2、枚舉
整型常量的集合(其中元素會自動按順序增1)
- 關鍵詞:enum
- 命名規範:E或E_開頭
- 常和switch組合使用
enum E_Animal
{
dog = 1,
cat,
fish
}
static void Main(string[] args)
{
E_Animal ea = E_Animal.cat;
switch(ea)
{
case E_Animal.dog:
Console.WriteLine("dog");
break;
case E_Animal.dog:
Console.WriteLine("dog");
break;
default:
break;
}
}
- 枚舉類型轉換:
// 枚舉轉int
int i = (int)ea;
// 枚舉轉string
string s = ea.ToString();
// string轉枚舉
string name = "fish";
ea = (E_Animal)Enum.Parse(typeof(E_Animal), name);
3、數組
任意變量類型,順序存儲的資料
// 數組
int[] arr;
// 10個長度的數組
int[] arr10 = new int[10];
// 初始化指派
int[] arr3 = new int[3] {1, 2, 3};
// 自動識别
int[] arrx = {1, 2, 3, 4, 5};
// 二維數組
int[,] arrD = new int[2, 2] {{1, 2}, {3, 4}};
// 交錯數組
string[][] ssd = new string[2][]
{
new string[] {"pencil", "¥1.00", "No.22"},
new string[] {"pen", "¥5.00", "No.23"}
}; };
// 周遊
for(int i = 0; i < arrx.Length; i++)
{
Console.WriteLint(arrx[i]);
}
// 二維數組周遊
// .GetLength(0)得到行數量,1為列數量。
for (int i = 0; i < arrD.GetLength(0); i++)
{
for(int j = 0; j < arrD.GetLength(1); j++)
{
Console.WriteLine(arrD[i, j]);
}
}
// 交錯數組周遊
for (int i = 0; i < ssd.GetLength(0); i++)
{
for(int j = 0; j < ssd[i].Length; j++)
{
Console.WriteLine(ssd[i][j]);
}
}
4、結構體
是變量和函數的集合
struct Student
{
// 變量(不能此處初始化)
public string name;
private int age;
// 構造函數(可選),沒有傳回值,使用時需要初始化所有變量
public Student(string _name, int _age)
{
this.name = _name;
this.age = _age;
}
// 方法(可選)
}
static void Main(string[] args)
{
Student ane = new Student("ane", 17);
}
5、函數
static int Add(int a, int b)
{
return a + b;
}
- ref,out:傳參時變為引用,在函數中會改變傳遞的參數資料
static void Main(string[] args)
{
// ref必須在外部初始化,out則不用
int m = 0;
int n;
Add(ref m,out n);
}
static int Add(ref int a, out int b)
{
// out必須指派,ref則不用
b = 1;
return a + b;
}
- params:可變參數關鍵字(後必須接數組);必須寫最後;可接受任意個數參數,傳入一個數組中
static void Main(string[] args)
{
Console.WriteLine(AddAll("ane is ", "person", ",man", ",god"));
}
static string AddAll(string no, params string[] s)
{
string ss = no;
foreach(string _s in s)
{
ss += _s;
}
return ss;
}
- 預設參數,必須寫在最後(調用時可以不傳該參數)
static void Main(string[] args)
{
Console.WriteLine(AddAll("ane is "));
}
static string AddAll(string no, string name = "ane")
{
return no + name;
}
6、函數重載
在同一語句塊中,用同一函數名,但傳參不同,則為函數重載(和傳回值無關)
// 普通函數
static int Add(int i, int j)
{
return i + j;
}
// 不同參數重載
static string Add(string i, string j)
{
return i + j;
}
// ref、out傳參,也能重載
static string Add(ref string i, string j)
{
return i + j;
}
// params可以重載
static string Add(string i, params string[] j)
{
return i;
}
7、遞歸函數
static void Func(int a)
{
if(a < 10)
{
a++;
Console.WriteLine(a);
Func(a);
}
}