程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#方法的重載

C#方法的重載

編輯:關於C語言

在前面的例子中,我們實際上已經看到了構造函數的重載。

程序清單11-7:

using System;
class Vehicle //定義汽車類
{
  public int wheels; //公有成員:輪子個數
  protected float weight; //保護成員:重量
  public Vehicle(){;}
  public Vehicle(int w,float g){
      wheels=w;
      weight=g;
    }
  public void Show(){
     Console.WriteLine("the wheel of vehicle is:{0}",wheels);
     Console.WriteLine("the weight of vehicle is:{0}",weight);
    }
  };

類的成員方法的重載也是類似的。類中兩個以上的方法(包括隱藏的繼承而來的方法),取的名字相同,只要使用的參數類型或者參數個數不同,編譯器便知道在何種情況下應該調用哪個方法,這就叫做方法的系列重載。

其實,我們非常熟悉的Console類之所以能夠實現對字符串進行格式化的功能,就是因為它定義了多個重載的成員方法:

public static void WriteLine();
public static void WriteLine(int);
public static void WriteLine(float);
public static void WriteLine(long);
public static void WriteLine(uint);
public static void WriteLine(char);
public static void WriteLine(bool);
public static void WriteLine(double);
public static void WriteLine(char[]);
public static void WriteLine(string);
public static void WriteLine(Object);
public static void WriteLine(ulong);
public static void WriteLine(string,Object[]);
public static void WriteLine(string,Object);
public static void WriteLine(char[],int,int);
public static void WriteLine(string,Object,Object);
public static void WriteLine(string,Object,Object,Object);

我們舉例子來說明重載的使用。學生類中包含有學生姓名、性別、年齡、體重等信息。我們需要比較學生之間的年齡和體重,我們可以采用下面的代碼。

程序清單11-8:

using System;
class Student //定義學生類
{
     public string s_name;
     public int s_age;
     public float s_weight;
 public Student(string n,int a,float w){
     s_name=n;
     s_age=a;
     s_weight=w;
}
     public int max_age(int x,int y){
         if(x>y) return x;
         else return y;
     }
     public float max_weight(float x,float y){
        if(x>y) return x;
        else return y;
     }
 }
   class Test
   {
    public static void Main(){
       Student s1=new Student("Mike",21,70);
       Student s2=new Student("John",21,70);
       if(s1.max_age(s1.s_age,s2.s_age)==s1.s_age)
          Console.WriteLine("{0}'s age is bigger than {1}'s",s1.s_name,s2.s_name);
       else
          Console.WriteLine("{0}'s age is smaller than {1}'s",s1.s_name,s2.s_name);
       if(s1.max_weight(s1.s_weight,s2.s_weight)==s1.s_weight)
          Console.WriteLIE("{0}'s weight is bigger than {1}'s",s1.s_name,s2.s_name);
       else
          Console.WriteLine("{0}'s weight is smaller than {1}'s",s1.s_name,s2.s_name);
     }
}

由於C#支持重載,我們可以給兩個比較大小的方法取同一個名字max,程序員在調用方法時,只需要在其中帶入實參,編譯器就會根據實參類型來決定到底調用哪個重載方法。程序員只需要使用max這個方法名,剩下的就是系統的事了。那樣,代碼我們改寫為:

程序清單11-9:

using System;
class Student //定義學生類
{
     public string s_name;
     public int s_age;
     public float s_weight;
 public Student(string n,int a,float w){
     s_name=n;
     s_age=a;
     s_weight=w;
 }
     public int max(int x,int y){
          if(x>y) return x;
          else return y;
     }
     public float max(float x,float y){
         if(x>y) return x;
         else return y;
     }
  }
  class Test
  {
    public static void Main(){
       Student s1=new Student("Mike",21,70);
       Student s2=new Student("John",21,70);
       if(s1.max(s1.s_age,s2.age)==s1.s_age)
          Console.WriteLine("{0}'s age is bigger than {1}'s",s1.name,s2.s_name);
       else
         Console.WriteLine("{0}'s age is smaller than {1}'s",s1.s_name,s2.s_name);
       if(s1.max(s1.s_weight,s2.s_weight)==s1.s_weight)
          Console.WriteLine("{0}'s weight is bigger than {1}'s",s1.s_name,s2.s_name);
       else
          Console.WriteLine("{0}'s weight is smaller than {1}'s",s1.s_name,s2.s_name);
    }
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved