Methods, signatures, and events

方法、簽章、事件

方法簽章

方法被宣告在class或struct之中,其需要指定

  • 可存取權限(存取修飾詞)
  • 回傳值
  • 方法名稱
  • 傳入參數
public void Speak(string what)
{
    // TODO
}
以此程式碼為例,我指定一個方法,其方法簽章為
  • 無回傳值
  • 方法名稱Speak
  • 傳入參數型別string
  • 可公開存取(public)
同一個類別不能存在同樣的方法簽章

 

方法參數

  • 當方法被使用時,必須傳參數到此方法
  • 傳進來的參數,須符合參數的型別
  • 如果兩個方法名稱一樣,會自動找到符合方法簽章的方法
public class Customer
{
    public int Points { get; private set; }

    // 公開方法、回傳值int 、名稱AddPoint、傳入一個參數、傳入型別int
    public int AddPoints(int pointsToAdd) 
    {
        this.Points += pointsToAdd;
        return Points;
    }

    // 公開方法、回傳值int 、名稱AddPoint、傳入兩個參數、傳入型別int
    public int AddPoints(int pointsToAdd, int masPoints)
    {
        Points += pointsToAdd;
        if (this.Points > masPoints )
        {
            this.Points = masPoints;
        }

        return this.Points;
    }
}

class Program
{
    static void Main(string[] args)
    {
        var customer = new Customer();

        // 一定要傳參數,且會自動對應到該方法
        customer.AddPoints(10);

        customer.AddPoints(10, 20);

    }
}

參數預設值

  • 方法的參數可給予預設值
  • 使用此方法時,預設值可不傳入
  • 預設參數,一定放在必傳參數後面
public class Customer
{
    public void Pay(int amount, string name = "Kevin", string method = "Cash")
    {
        // TODO
    }
}

class Program
{
    static void Main(string[] args)
    {
        var customer = new Customer();

        // 可傳入預設參數
        customer.Pay(100, "Bob", "Credit");

        // 也可選擇不傳入預設參數
        customer.Pay(100);

    }
}

具名參數

  • 開發者,可以不用按照順序傳入參數,可用指定的方式傳入
  • 在使用上,可以更清楚傳入的參數是什麼
class Program
{
    static void Main(string[] args)
    {
        var customer = new Customer();

        // 用具名的方式,可直接傳入第三個參數
        customer.Pay(100, method : "Credit");

    }
}

 

事件

事件的內容還蠻多的,所以另外寫一篇委派和事件的文章,來說明事件。

 

 

一天一分享,身體好健康。

該追究的不是過去的原因,而是現在的目的。