天天看點

【C#快速入門】二、C#中級知識極簡彙總

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);
    }
}
           

繼續閱讀