程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#基本語法學習(四),

C#基本語法學習(四),

編輯:C#入門知識

C#基本語法學習(四),


重載

  一個方法的名字和方法的參數列表稱為方法的簽名。C#根據方法簽名來識別方法,如果兩個方法簽名不同那麼他們就是兩個不同的方法。

  重載可以是方法重載(包括構造函數重載)和運算符重載。方法重載指的是一組名字相同而參數列表不同的方法。但方法的返回值類型不同不能構成重載。

1 public static int max(int a, int b)
2 {
3 
4 }
5 
6 public static int max(int a, int b, int c)
7 {
8 
9 }

  C#中除了方法可以重載,運算符(+、-、*)也可以被重載。運算符重載允許一個類或者結構支持某種運算符運算。當然也可以用方法實現與運算符重載相同的功能,但在某些情況下,使用運算符重載比使用方法更符合人們日常的方式和習慣。

  運算符重載語法如下:

  public static 返回類型 operator 運算符(參數列表)

  {

    //運算過程代碼

  }

  在運算符重載定義語法中public、static和operator是固定的,必須在運算符重載定義中出現,public和static表示這個方法是公共的和靜態的,operator表示這是一個運算符重載方法。參數列表個數與具體運算符對應。

  還有一種特殊的運算符重載,叫做類型轉換運算符重載。語法如下:

  public static explicit|implicit operator 轉換目的類型(參數)

  參數為待轉換的數據,轉換目的類型為想要得到的轉換後的數據類型,explicit表示轉換必須為顯示轉換,implicit表示轉換可以是隱式轉換。

  如下一維向量重載“+”和類型轉換:

  1 namespace OperatorOverload
  2 {
  3        //一維向量 
  4     class Vector
  5     {
  6         private int _rank = 0;
  7         public int rank
  8         {
  9             get { return _rank; }
 10         }
 11 
 12         private double[] _values;
 13         public double[] values
 14         {
 15             get { return _values; }
 16         }
 17 
 18         public Vector(int n)
 19         {
 20             _rank = n;
 21             _values = new double[n];
 22         }
 23 
 24         public Vector(double[] doubleArray)
 25         {
 26             _rank = doubleArray.Length;
 27             _values = doubleArray;
 28         }
 29         
 30         //+重載
 31         public static Vector operator +(Vector a, Vector b)
 32         {
 33             if (a.rank == 0 || b.rank == 0)
 34                 return null;
 35 
 36             //向量秩不相等無法相加
 37             if (a.rank != b.rank)
 38                 return null;
 39 
 40             double[] sum = new double[a.rank];
 41             double[] valuesa = a.values;
 42             double[] valuesb = b.values;
 43 
 44             for (int i = 0; i < a.rank; i++)
 45             {
 46                 sum[i] = valuesa[i] + valuesb[i];
 47             }
 48 
 49             Vector result = new Vector(sum);
 50 
 51             return result;
 52         }
 53 
 54         //類型轉換重載
 55         public static explicit operator double[](Vector v)
 56         {
 57             return v.values;
 58         }
 59 
 60         public static explicit operator Vector(double[] array)
 61         {
 62             return new Vector(array);
 63         }
 64 
 65         //重寫ToString方法
 66         public override string ToString()
 67         {
 68             string result = "(";
 69             for (int i = 0; i < _rank - 1; i++)
 70             {
 71                 result += _values[i].ToString() + ", ";
 72             }
 73             result += _values[_rank - 1] + ")";
 74 
 75             return result;
 76         }
 77     }
 78 }
 79 
 80 namespace OperatorOverload
 81 {
 82     class Program
 83     {
 84         static void Main(string[] args)
 85         {
 86             Vector a, b, c;
 87 
 88             a = new Vector(new double[] { 11.1, 12.1, 13.1, 14.1, 15.1 });
 89             b = new Vector(new double[] {22.2, 32.2, 33.2, 34.2, 35.2});
 90             c = a + b;
 91             Console.WriteLine("Vector a=" + a.ToString());
 92             Console.WriteLine("Vector b=" + b.ToString());
 93             Console.WriteLine("Vector a+b=" + c.ToString());
 94 
 95             double[] array = new double[] { 1, 2, 3, 4, 5 };
 96             Vector d = (Vector)array;
 97 
 98             Console.WriteLine("array-->Vector: " + d.ToString());
 99 
100             Console.ReadLine();
101         }
102     }
103 }

 運行結果

Vector a=(11.1, 12.1, 13.1, 14.1, 15.1)
Vector b=(22.2, 32.2, 33.2, 34.2, 35.2)
Vector a+b=(33.3, 44.3, 46.3, 48.3, 50.3)
array-->Vector: (1, 2, 3, 4, 5)

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved