回覆列表
  • 1 # 使用者1163201958491

    可以理解為類似的傳址引用,同時還有out。

    在函式需要外部傳入一個變數名,然後在程式內部可以將這個值進行修改,典型的傳址引用!在定義時必要加ref或out說明!

    public void MethodA(out string s )

    {

    s = "1";

    }

    呼叫時,應該先宣告一個字元變數。

    string temp;

    MethodA(out temp);

    此時可以列印temp的值會變作"1";

    而ref與out基本是類同的,如果在程式中引用原值的話,必須使用ref防止傳入未初始化的值。

    public void MethodB(ref int s)

    {

    s = s*s;

    }

    因為該函式要使用形參的原值,所以這裡必須使用ref宣告,不要使用out宣告。

    使用時,

    int temp = 8;

    MethodB(ref temp);

    列印temp的值會變為64。

    ref因為對原值進行了引用,所以ref要求傳入的一定是一個初始化後的值,不能是未初始化的值。

    int temp;

    MethodB(ref temp);

    //原則上這樣是會錯的,但這裡我使用了一個int,由於在宣告時int temp與int temp =0 是等價的,所以不會出錯,但如果是字串,使用這種方式完全是可以報錯的!因為string temp與string temp ="";是不等價的,你也可理解為必須賦值後才可以使用。

    public void MethodC(ref string s)

    {

    .......

    }

    string temp;

    MethodC(ref temp);//這種就是錯誤的方式。ref要求必須形參已經賦值(初始化)。

    string temp = "";

    MethodC(ref temp);//這種方式就是正確的。

    我們定義成員方法時,如果有引用原值使用必須使用ref,防上對方傳入一個未初始化的值,引發程式錯誤,而沒有必要對形參的值有要求時,則儘量使用out,防止呼叫時增加客戶端程式碼量。

  • 中秋節和大豐收的關聯?
  • 怎樣更改windows10的使用者名稱?