天天看點

C#學習筆記1

類和對象

  1. 類型參數(type parameters)類定義時指定一組代表參數類型。然後再聲明類的時候可以定義相應的參數類型,如下例pair的類型參數是TFirst和TSecond
public class Pair<TFirst,TSecond>
{
    public TFirst First;
    public TSecond Second;
}
Pair<int,string> pair = new Pair<int,string> { First = 1, Second = "two" };
int i = pair.First;     // TFirst is int
string s = pair.Second; // TSecond is string
           
  1. 靜态字段、執行個體字段、靜态方法,執行個體方法、靜态類。

    在靜态方法中引用 this 會生成錯誤。執行個體方法可以通路靜态字段和執行個體字段,但是靜态方法隻能通路靜态字段,且不能調用this。

虛方法、重寫方法和抽象方法

  1. 調用虛方法時,為其調用方法的執行個體的運作時類型決定了要調用的實際方法實作代碼。 調用非虛方法時,執行個體的編譯時類型是決定性因素。
  2. 抽象方法是沒有實作代碼的虛方法。 抽象方法使用 abstract 修飾符進行聲明,隻能在同樣聲明了 abstract 的類中使用。必須在所有非抽象派生類中重寫抽象方法。

屬性和字段的差別

屬性是對字段的封裝,屬性的實質是方法(get或set方法)。如果允許自由讀寫,對取值範圍沒有限制,值的變化不會影響類中其他成員就使用公共字段,反之則使用屬性。

接口

  1. 接口定義了可由類和結構實作的協定,接口可以包含方法、屬性、事件和索引器。接口不提供所定義成員的實作,僅指定必須由實作接口的類或結構提供的成員。
  2. 接口的特殊性是:當定義一個類時,可以派生自多重接口,而類隻能可以從僅有的一個類派生。

泛型

還沒搞懂

元祖

可以重載Deconstruct方法來析構此類型的執行個體

using System;

public class Person
{
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }
    public string City { get; set; }
    public string State { get; set; }

    public Person(string fname, string mname, string lname,
                  string cityName, string stateName)
    {
        FirstName = fname;
        MiddleName = mname;
        LastName = lname;
        City = cityName;
        State = stateName;
    }

    // Return the first and last name.
    public void Deconstruct(out string fname, out string lname)
    {
        fname = FirstName;
        lname = LastName;
    }

    public void Deconstruct(out string fname, out string mname, out string lname)
    {
        fname = FirstName;
        mname = MiddleName;
        lname = LastName;
    }

    public void Deconstruct(out string fname, out string lname,
                            out string city, out string state)
    {
        fname = FirstName;
        lname = LastName;
        city = City;
        state = State;
    }
}

public class Example
{
    public static void Main()
    {
        var p = new Person("John", "Quincy", "Adams", "Boston", "MA");

        // Deconstruct the person object.
        var (fName, lName, city, state) = p;
        Console.WriteLine($"Hello {fName} {lName} of {city}, {state}!");
    }
}
           

委托

委托是引用類型,可以把它看作是用來存方法的一種類型。比如說類型string用來定義存取字元串的變量,那麼委托類型delegate就可以用來定義存方法的變量。委托和類一樣,是一種使用者自定義類型。但類表示的是資料和方法的集合,而委托表示的是一個或多個方法的集合。你可以把delegate看作一個包含有序方法清單的對象,這些方法具有相同的簽名和傳回類型

  1. 委托是C#實作回調函數的一種機制