1. 程式人生 > >C#基礎-類的基礎知識

C#基礎-類的基礎知識

3 方法

方法(Method)是一組程式程式碼的集合。每個方法都是有一個方法名,便於識別和其他方法呼叫。

3.1 方法的定義與使用

C#程式中定義的方法都必須放在某個類中。定義方法的一般形式為:
訪問修飾符 返回值型別 方法名稱(引數序列)
{
  語句序列
}
在定義方法時,需要注意以下幾點:
(1)方法名稱後面的小括號中可以有引數序列,也可以沒有引數,但是不論是否有引數,小括號都是必需的。如果引數序列中的引數有多個,則以逗號分隔開。
(2)如果要結束某個方法的執行,可以使用return語句。程式遇到return語句後,會將執行流程交還給呼叫此方法的程式程式碼段。此外,還可以利用return語句返回一個值。注意,return語句只能返回一個值。
(3)如果宣告一個void型別的方法,return語句可以省略不寫;如果宣告一個非void型別的方法,則方法中必須至少有一個return語句。
下面的例子說明了如何定義一個方法,以及在程式中如何呼叫它。
【例】定義和呼叫方法
using System;
class Method
{
  public int MyMethod()
  {
    Console.WriteLine("this is MyMethod.");
    int i=10;
    return i;
  }
  static void Main()
  {
    Method method = new Method();
    int j=5;
    j=method.MyMethod();
    Console.WriteLine("the value is {0}.",j);
  }
}
輸出結果為:
this is MyMethod();
this value is 10.

3.2 方法中的引數傳遞

定義方法時可以將引數傳入方法中進行處理,也可以將方法中處理過的資訊傳回給呼叫者。當常量作為引數傳遞時,不論是通過值傳遞還是通過引用傳遞,都不能在程式碼中修改該常量。
將常量引數傳入到方法的方式有下面幾種:
1、傳遞值型別的引數
值型別引數的格式為:
引數型別 引數名
定義值型別引數的方式很簡單,只要註明引數型別和引數名即可。當該方法被呼叫時,便會為每個值型別引數分配一個新的記憶體空間,然後將對應的表示式運算的值複製到該記憶體空間。在方法中更改引數的值不會影響到這個方法之外的變數。
【例】方法中值型別引數的傳遞
using System;
class Method
{
  public static void AddOne(int a)
  {
    a++;
  }
  static void Main()
  {
    int a=3;
    Console.WriteLine("呼叫AddOne之前,a={0}",a);
    AddOne(a);
    Console.WriteLine("呼叫AddOne之後,a={0}",a);
  }
}
輸出結果為:
呼叫AddOne之前,a=3
呼叫AddOne之後,a=3
2、傳遞引用型別的引數
引用型別引數的格式為:
ref 引數型別 引數名
與傳遞值型別引數不同,引用型別的引數並沒有分配記憶體空間,實際上傳遞的是指向原變數的指標,即引用引數和原變數儲存在同一個地址。為了和傳遞值型別引數區分,前面加ref關鍵字(Reference)。在方法中修改引用引數的值實際上也就是修改被引用的變數的值。
【例】方法中引用型別引數的傳遞
using System;
class Method
{
  public static void AddOne(ref int a)
  {
    a++;
  }
  static void Main()
  {
    int x=3;
    Console.WriteLine("呼叫AddOne之前,x={0}",x);
    AddOne(x);
    Console.WriteLine("呼叫AddOne之後,x={0}",x);
  }
}
輸出結果為:
呼叫AddOne之前,x=3
呼叫Addone之後,x=4
3、輸出多個引用型別的引數
有時候一個方法計算的結果有多個,而return語句一次只能返回一個結果,這時就要用到了out關鍵字。使用out表明該引用引數是用於輸出的,而且呼叫該引數時不需要對引數進行初始化。
輸出多個引用型別引數的格式為:
out 引數型別 引數名
【例】輸出多個引用型別的引數
using System;
class Method
{
  public static void MyMethod(out int a,out int b)
  {
    a=5;
    b=6;
  }
  static void Main()
  {
    int x,y;
    MyMethod(out x,out y);
    Console.WriteLine("呼叫MyMethod之後,x={0},y={1}",x,y);
  }
}
輸出結果為:
呼叫MyMethod之後,x=5,y=6
4、傳遞個數不確定的引數
當需要傳遞的引數個數不確定時,比如求幾個數的平均值,由於沒有規定是幾個數,執行程式時,每次輸入的值的個數就不一定一樣。為了解決這個問題,C#採用params關鍵字宣告引數的個數是不確定的。
【例】傳遞個數不確定的引數
using System;
class Method()
{
  public static float VarLenParams(params long[] v)
  {
    long total,i;
    for(i=0,total=0;i
輸出結果為:
1+2+3+5的平均值為2.75
4+5+6+7+8的平均值為6

3.3方法過載

方法過載是指具有相同的方法名,但是引數型別或引數個數不完全相同的多個方法可以同時出現在一個類中。這種技術非常有用,在開發過程中,可以發現C#中很多方法均使用了過載技術。
【例】方法過載
using System;
class Method
{
  public static int Add(int i,int j)
  {
    return i+j;
  }
  public static string Add(string s1,string s2)
  {
    return s1+s2;
  }
  public static long Add(long x)
  {
    return x+5;
  }
  static void Main()
  {
    Console.WriteLine(Add(1,2));
    Console.WriteLine(Add("1","2"));
    Console.WriteLine(Add(10));
  }
}
輸出結果為:
3
12
15
在這個例子中,雖然有多個Add方法,但由於方法中引數的個數和型別不完全相同,所以呼叫時會自動找到最匹配的方法。