程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 程序員參考--運算符重載教學文章

C# 程序員參考--運算符重載教學文章

編輯:C#入門知識

本教程演示用戶定義的類如何重載運算符。

示例文件

請參見“運算符重載”示例以下載和生成本教程中討論的示例文件。
教程

運算符重載允許為運算指定用戶定義的運算符實現,其中一個或兩個操作數是用戶定義的類或結構類型。本教程包含兩個示例。第一個示例展示如何使用運算符重載創建定義復數加法的復數類。第二個示例展示如何使用運算符重載實現三值的邏輯類型。

示例 1

本示例展示如何使用運算符重載創建定義復數加法的復數類 Complex。本程序使用 ToString 方法的重載顯示數字的虛部和實部以及加法結果。

// complex.cs



using System;







public struct Complex 



{



   public int real;



   public int imaginary;







   public Complex(int real, int imaginary) 



   {



      this.real = real;



      this.imaginary = imaginary;



   }







   // Declare which operator to overload (+), the types 



   // that can be added (two Complex objects), and the 



   // return type (Complex):



   public static Complex operator +(Complex c1, Complex c2) 



   {



      return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary);



   }



   // Override the ToString method to display an complex number in the suitable format:



   public override string ToString()



   {



      return(String.Format("{0} + {1}i", real, imaginary));



   }







   public static void Main() 



   {



      Complex num1 = new Complex(2,3);



      Complex num2 = new Complex(3,4);







      // Add two Complex objects (num1 and num2) through the



      // overloaded plus operator:



      Complex sum = num1 + num2;







     // Print the numbers and the sum using the overriden ToString method:



      Console.WriteLine("First complex number:  {0}",num1);



      Console.WriteLine("Second complex number: {0}",num2);



      Console.WriteLine("The sum of the two numbers: {0}",sum);



 



   }



}

輸出

First complex number:  2 + 3i



Second complex number: 3 + 4i



The sum of the two numbers: 5 + 7i

示例 2

本示例展示如何使用運算符重載實現三值的邏輯類型。該類型的可能值有 DBBool.dbTrueDBBool.dbFalseDBBool.dbNull,其中 dbNull 成員表示未知值。

注意   定義 True 和 False 運算符只對表示 True、False 和 Null(既非 True 也非 False)的類型有用,如數據庫中使用的類型。
// dbbool.cs



using System;







public struct DBBool



{



   // The three possible DBBool values:



   public static readonly DBBool dbNull = new DBBool(0);



   public static readonly DBBool dbFalse = new DBBool(-1);



   public static readonly DBBool dbTrue = new DBBool(1);



   // Private field that stores -1, 0, 1 for dbFalse, dbNull, dbTrue:



   int value; 







   // Private constructor. The value parameter must be -1, 0, or 1:



   DBBool(int value) 



   {



      this.value = value;



   }







   // Implicit conversion from bool to DBBool. Maps true to 



   // DBBool.dbTrue and false to DBBool.dbFalse:



   public static implicit operator DBBool(bool x) 



   {



      return x? dbTrue: dbFalse;



   }







   // Explicit conversion from DBBool to bool. Throws an 



   // exception if the given DBBool is dbNull, otherwise returns



   // true or false:



   public static explicit operator bool(DBBool x) 



   {



      if (x.value == 0) throw new InvalidOperationException();



      return x.value > 0;



   }







   // Equality operator. Returns dbNull if either operand is dbNull, 



   // otherwise returns dbTrue or dbFalse:



   public static DBBool operator ==(DBBool x, DBBool y) 



   {



      if (x.value == 0 || y.value == 0) return dbNull;



      return x.value == y.value? dbTrue: dbFalse;



   }






[1] [2] 下一頁  

// Inequality operator. Returns dbNull if either operand is // dbNull, otherwise returns dbTrue or dbFalse: public static DBBool operator !=(DBBool x, DBBool y) { if (x.value == 0 || y.value == 0) return dbNull; return x.value != y.value? dbTrue: dbFalse; } // Logical negation operator. Returns dbTrue if the operand is // dbFalse, dbNull if the operand is dbNull, or dbFalse if the // operand is dbTrue: public static DBBool operator !(DBBool x) { return new DBBool(-x.value); } // Logical AND operator. Returns dbFalse if either operand is // dbFalse, dbNull if either operand is dbNull, otherwise dbTrue: public static DBBool operator &(DBBool x, DBBool y) { return new DBBool(x.value < y.value? x.value: y.value); } // Logical OR operator. Returns dbTrue if either operand is // dbTrue, dbNull if either operand is dbNull, otherwise dbFalse: public static DBBool operator |(DBBool x, DBBool y) { return new DBBool(x.value > y.value? x.value: y.value); } // Definitely true operator. Returns true if the operand is // dbTrue, false otherwise: public static bool operator true(DBBool x) { return x.value > 0; } // Definitely false operator. Returns true if the operand is // dbFalse, false otherwise: public static bool operator false(DBBool x) { return x.value < 0; } // Overload the conversion from DBBool to string: public static implicit operator string(DBBool x) { return x.value > 0 ? "dbTrue" : x.value < 0 ? "dbFalse" : "dbNull"; } // Override the Object.Equals(object o) method: public override bool Equals(object o) { try { return (bool) (this == (DBBool) o); } catch { return false; } } // Override the Object.GetHashCode() method: public override int GetHashCode() { return value; } // Override the ToString method to convert DBBool to a string: public override string ToString() { switch (value) { case -1: return "DBBool.False"; case 0: return "DBBool.Null"; case 1: return "DBBool.True"; default: throw new InvalidOperationException(); } } } class Test { static void Main() { DBBool a, b; a = DBBool.dbTrue; b = DBBool.dbNull; Console.WriteLine( "!{0} = {1}", a, !a); Console.WriteLine( "!{0} = {1}", b, !b); Console.WriteLine( "{0} & {1} = {2}", a, b, a & b); Console.WriteLine( "{0} | {1} = {2}", a, b, a | b); // Invoke the true operator to determine the Boolean // value of the DBBool variable: if (b) Console.WriteLine("b is definitely true"); else Console.WriteLine("b is not definitely true"); } }

輸出

!DBBool.True = DBBool.False



!DBBool.Null = DBBool.Null



DBBool.True & DBBool.Null = DBBool.Null



DBBool.True | DBBool.Null = DBBool.True



b is not definitely true

 

上一頁  [1] [2] 

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