熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C# 語言規范--1.3 變量和參數

2022-06-13   來源: .NET編程 

  變量表示存儲位置每個變量都屬於一種類型它確定什麼樣的值可以存儲在該變量中局部變量是在方法屬性或索引器中聲明的變量局部變量是通過指定類型名稱和聲明符(它指定變量名和可選的初始值)定義的

   

  int a;

  int b = ;

  但局部變量聲明也可以包含多個聲明符a 和 b 的聲明可以重寫為

   

  int a b = ;

  一個變量必須先賦值然後才能使用它的值示例

   

  class Test

  {

  static void Main() {

  int a;

  int b = ;

  int c = a + b;   // error a not yet assigned

  

  }

  }

   

  導致編譯時錯誤因為它試圖在給變量 a 賦值之前使用它

   

  字段是與類或結構或與類或結構的實例關聯的變量用 static 修飾符聲明的字段定義靜態變量不用此修飾符聲明的字段則定義實例變量靜態字段與類型關聯而實例變量與實例關聯示例

   

  using PersonnelData;

  class Employee

  {

  private static DataSet ds;

  public string Name;

  public decimal Salary;

  

  }

   

  顯示了具有一個私有靜態變量和兩個公共實例變量的 Employee 類

   

  形參聲明也定義變量有四種類型的參數值參數引用參數輸出參數和參數數組

   

  值參用於in參數傳遞在此過程中自變量的值被傳入方法中因為一個值參在方法中用自己的變量存儲(而非原自變量)所以對此參數的修改不會影響到原自變量值參的變量是通過復制原自變量的值來初始化的示例

   

  using System;

  class Test {

  static void F(int p) {

  ConsoleWriteLine(p = {} p);

  p++;

  }

  static void Main() {

  int a = ;

  ConsoleWriteLine(pre:  a = {} a);

  F(a);

  ConsoleWriteLine(post: a = {} a);

  }

  }

   

  顯示了一個具有名為 p 的值參數的方法 F示例輸出結果如下

   

  pre:  a =

  p =

  post: a =

  即使值參數 p 已修改

   

  引用參數用於by reference參數傳遞在此過程中引用參數就是調用者提供的自變量的別名引用參數並不定義自己的變量而是直接引用原自變量因此對引用參數的修改就將直接影響相應原自變量的值引用參數用 ref 修飾符來聲明示例

   

  using System;

  class Test {

  static void Swap(ref int a ref int b) {

  int t = a;

  a = b;

  b = t;

  }

  static void Main() {

  int x = ;

  int y = ;

   

  ConsoleWriteLine(pre:  x = {} y = {} x y);

  Swap(ref x ref y);

  ConsoleWriteLine(post: x = {} y = {} x y);

  }

  }

  顯示了一個具有兩個引用參數的 Swap 方法產生的輸出為

   

  pre:  x = y =

  post: x = y =

   

  在形參聲明和形參的使用中都必須使用 ref 關鍵字在調用位置使用 ref 可以引起對參數的特別注意這樣閱讀代碼的開發人員就會知道參數值可以因調用而更改

   

  對於輸出參數來說調用者提供的自變量的初始值並不重要除此之外輸出參數與引用參數類似輸出參數是用 out 修飾符聲明的示例

   

  using System;

  class Test {

  static void Divide(int a int b out int result out int remainder) {

  result = a / b;

  remainder = a % b;

  }

  static void Main() {

  for (int i = ; i < ; i++)

  for (int j = ; j < ; j++) {

  int ans r;

  Divide(i j out ans out r);

  ConsoleWriteLine({} / {} = {}r{} i j ans r);

  }

  }

  }

   

  顯示了一個 Divide 方法該方法包含兩個輸出參數一個參數用於除法的結果另一個參數用於余數

   

  對於值引用和輸出這三種類型的參數在調用方提供的自變量和用於表示它們的參數之間存在一對一的對應關系參數數組則允許存在多對一關系多個參數可以用一個自變量來表示換言之參數數組允許可變長度的自變量列表

   

  參數數組用 params 修飾符聲明一個給定的方法只能有一個參數數組而且它必須始終是最後一個指定的參數參數數組的類型總是一維數組類型調用方可以傳遞一個屬同一類型的數組變量或任意多個與該數組的元素屬同一類型的自變量例如示例

   

  using System;

  class Test

  {

  static void F(params int[] args) {

  ConsoleWriteLine(# of arguments: {} argsLength);

  for (int i = ; i < argsLength; i++)

  ConsoleWriteLine(\targs[{}] = {} i args[i]);

  }

  static void Main() {

  F();

  F();

  F( );

  F( );

  F(new int[] { });

  }

  }

   

  顯示了帶數目可變的 int 參數的方法 F以及對此方法的若干個調用輸出為

   

  # of arguments:

  # of arguments:

  args[] =

  # of arguments:

  args[] =

  args[] =

  # of arguments:

  args[] =

  args[] =

  args[] =

  # of arguments:

  args[] =

   

  args[] =

  args[] =

  args[] =

  

  此介紹中出現的大部分示例使用 Console 類的 WriteLine 方法此方法的參數替換行為(如下面的示例所示)

   

  int a = b = ;

  ConsoleWriteLine(a = {} b = {} a b);

   

  是使用參數數組完成的為適應常見的各種需要WriteLine 方法有若干個重載的方法供選用這些方法中有些需傳遞固定個數的參數有些使用了參數數組

   

  namespace System

  {

  public class Console

  {

  public static void WriteLine(string s) {}

  public static void WriteLine(string s object a) {}

  public static void WriteLine(string s object a object b) {}

  

  public static void WriteLine(string s params object[] args) {}

  }

  }


From:http://tw.wingwit.com/Article/program/net/201311/13596.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.