【C#基礎概念】函數參數默認值和指定傳參和方法參數


 

 

函數參數默認值和指定傳參

最近在編寫代碼時發現介紹C#參數默認值不能像PL/SQL那樣直接設置default,網上也沒有太多詳細的資料,自己琢磨並試驗后整理成果如下:

  • C#允許在函數聲明部分定義默認值

  • 參數默認值設定后,調用時可以不用填寫有默認值的參數

  • 參數傳遞順序,順序調用在前,指定參數調用在后

1.默認參數設置

一般函數聲明

public void FuncPara(string a,string b)

設置默認值

public void FuncPara(string a="specify by default a",string b= "specify by default b")

public void FuncPara(string a="specify by default",string b= "specify by default")
    {
        MessageBox.Show(a +"\n"+ b+"\n");
    }
private void button1_Click(object sender, EventArgs e)
    {
        FuncPara();
    }

此時調用函數將采用默認值

messagebox出來的是:

specify by default a

specify by default b

 

在調用時重寫默認參數

public void FuncPara(string a = "specify by default a", string b = "specify by default b")
    {
        MessageBox.Show(a + "\n" + b + "\n");
    }
private void button1_Click(object sender, EventArgs e)
    {
        FuncPara( b: "specify by call");
    }

此時調用函數a將采用默認值,b的值在調用時被重寫了

messagebox出來的是:

specify by default a

specify by call

 

3.參數傳遞時的順序


原則先傳順序參數值,后傳指定參數,沒有指定參數的傳值全部是按照順序傳遞的
3.1順序調用

這是最基本的參數調用方式,根據參數順序傳參,順序參數在編寫和調用時應當放在前面

編寫函數首部時,有默認值參數一旦出現,后面的參數應當全部為有默認值的參數否則編譯器會報錯

 

public void FuncPara(string c,string a="specify by default",string b= "specify by default")

 

  調用時

 

 

 

FuncPara("c","a","b");
依次向參數c,a,b傳值

錯誤寫法

public void FuncPara(string a="specify by default",string c,string b= "specify by default")

3.2指定參數調用

你可以不按照順序指定調用時的參數傳值

public void FuncPara(string a="specify by default",string b= "specify by default")

只指定b,a采用默認值

FuncPara( b: "specify by call");

messagebox出來的是:

specify by default a

specify by call

也可以不按順序:

 

 FuncPara( b: "specify by call",a:"sdfe");

 

 

方法參數

為不具有 inrefout 的方法聲明的參數會按值傳遞給調用的方法。 可以在方法中更改該值,但當控制傳遞回調用過程時,不會保留更改后的值。 可以通過使用方法參數關鍵字更改此行為。

本部分介紹聲明方法參數時可以使用的關鍵字:

  • params 指定此參數采用可變數量的參數。

  • in 指定此參數由引用傳遞,但只由調用方法讀取。

  • ref 指定此參數由引用傳遞,可能由調用方法讀取或寫入。

  • out 指定此參數由引用傳遞,由調用方法寫入。

params(C# 參考)

使用 params 關鍵字可以指定采用數目可變的參數的方法參數。 參數類型必須是一維數組。

在方法聲明中的 params 關鍵字之后不允許有任何其他參數,並且在方法聲明中只允許有一個 params 關鍵字。

如果 params 參數的聲明類型不是一維數組,則會發生編譯器錯誤 CS0225

使用 params 參數調用方法時,可以傳入:

  • 數組元素類型的參數的逗號分隔列表。
  • 指定類型的參數的數組。
  • 無參數。 如果未發送任何參數,則 params 列表的長度為零。

in 參數修飾符(C# 參考)

in 關鍵字會導致按引用傳遞參數,但確保未修改參數。 它讓形參成為實參的別名,這必須是變量。 換而言之,對形參執行的任何操作都是對實參執行的。 它類似於 refout 關鍵字,不同之處在於 in 參數無法通過調用的方法進行修改。 out 參數必須由調用的方法進行修改,這些修改在調用上下文中是可觀察的,而 ref 參數是可以修改的。   在調用函數的時候in是可選的。用in聲明參數的函數可以重載。更多用法請看

 

static void Method(in int argument)
{
    // implementation removed
}

Method(5); // OK, temporary variable created.
Method(5L); // CS1503: no implicit conversion from long to int
short s = 0;
Method(s); // OK, temporary int created with the value 0
Method(in s); // CS1503: cannot convert from in short to in int
int i = 42;
Method(i); // passed by readonly reference
Method(in i); // passed by readonly reference, explicitly using `in`

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM