例如,通常需要编写类似于以下内容的代码,以将两个数字相加。很明显,sum 是两个数字之和。
int i = 5;
int sum = i + j;
如果可以使用代表复数的用户定义的类型来编写相同类型的表达式,那当然是最好不过了:
Complex i = 5;
Complex sum = i + j;
运算符重载允许为用户定义的类型重载(即指定明确的含义)诸如“+”这样的运算符。如果不进行重载,则用户需要编写以下代码:
Complex i = new Complex(5);
Complex sum = Complex.Add(i, j);
此代码可以很好地运行,但 Complex 类型并不能象语言中的预定义类型那样发挥作用。
轉自:http://www.ixpub.net/archiver/tid-677435.html
在我看來是操作符重載是讓struct、class、Interface等能夠進行運算。
如時實現操作符重載:
先寫關鍵字public和static,后跟返回類型,后跟operator關鍵字,后跟要聲明的操作符符號,最后在對一對圓括號中添加恰當的參數。
如下例中的struct Hour中的public static Hour operator+ (Hour lhs,Hour rhs){...}
操作符重載方法:
1、編寫操作符重載方法。
2、實例化后,進行操作符運算
下邊用代碼進行說明:
示例2:
在我看來是操作符重載是讓struct、class、Interface等能夠進行運算。
如時實現操作符重載:
先寫關鍵字public和static,后跟返回類型,后跟operator關鍵字,后跟要聲明的操作符符號,最后在對一對圓括號中添加恰當的參數。
如下例中的struct Hour中的public static Hour operator+ (Hour lhs,Hour rhs){...}
操作符重載方法:
1、編寫操作符重載方法。
2、實例化后,進行操作符運算
下邊用代碼進行說明:
class Program
{
static void Main(string[] args)
{
Hour hrValue1 = new Hour(10);
Hour hrValue2 = new Hour(20);
//2、得到兩個Hour相加結果
Hour hrSum = hrValue1 + hrValue2;
//得到Hour+Int的結果
Hour hrSumInt = hrValue1 + 10;
//得到Int+Hour的結果
Hour hrIntSum = 11 + hrValue2;
Console.WriteLine("hrValue1 + hrValue2 = {0}", hrSum.iValue);
Console.WriteLine("hrValue1 + 10 = {0}", hrSumInt.iValue);
Console.WriteLine("11 + hrValue2 = {0}", hrIntSum.iValue);
Console.ReadKey();
}
struct Hour
{
private int value;
//此構造函數根據int值創建Hour類
public Hour(int iValue)
{
this.value = iValue;
}
//定義一個屬性,便於取用value值
public int iValue
{
get
{
return value;
}
}
//1、聲明一個二元操作符,將兩個Hour類加到一起
public static Hour operator+ (Hour lhs,Hour rhs)
{
return new Hour(lhs.value + rhs.value);
}
/*
操作符是public的。所有操作符都必須是public的
操作符是static的。所有操作符都必須是static的,操作永遠不具有多態性,
面且不能使用virtual、abstract、override或者sealed修飾符。
二元操作符(比如+)有兩個顯式參數;一元操作符有一個顯式的參數
我們有了public Hour(int iValue)構造函數,就可以將一個int與Hour相加,只是首先要將int轉換成為Hour
hour a=
;
int b=
;
Hour sum=a+new Hour(b);
雖然上述代碼完全有效,但相較於讓一個Hour和一個int直接相加它即不清晰也不準確。
為了使Hour可以+ int,必須聲明一個二元操作符+,它的第一個參數是Hour,第二個參數是一個int。
*/
public static Hour operator+ (Hour lhs,int rhs)
{
return lhs + new Hour(rhs);
}
//使一個int 可以+hour。
public static Hour operator +(int lhs, Hour rhs)
{
return new Hour(lhs)+rhs;
}
}
}
{
static void Main(string[] args)
{
Hour hrValue1 = new Hour(10);
Hour hrValue2 = new Hour(20);
//2、得到兩個Hour相加結果
Hour hrSum = hrValue1 + hrValue2;
//得到Hour+Int的結果
Hour hrSumInt = hrValue1 + 10;
//得到Int+Hour的結果
Hour hrIntSum = 11 + hrValue2;
Console.WriteLine("hrValue1 + hrValue2 = {0}", hrSum.iValue);
Console.WriteLine("hrValue1 + 10 = {0}", hrSumInt.iValue);
Console.WriteLine("11 + hrValue2 = {0}", hrIntSum.iValue);
Console.ReadKey();
}
struct Hour
{
private int value;
//此構造函數根據int值創建Hour類
public Hour(int iValue)
{
this.value = iValue;
}
//定義一個屬性,便於取用value值
public int iValue
{
get
{
return value;
}
}
//1、聲明一個二元操作符,將兩個Hour類加到一起
public static Hour operator+ (Hour lhs,Hour rhs)
{
return new Hour(lhs.value + rhs.value);
}
/*
操作符是public的。所有操作符都必須是public的
操作符是static的。所有操作符都必須是static的,操作永遠不具有多態性,
面且不能使用virtual、abstract、override或者sealed修飾符。
二元操作符(比如+)有兩個顯式參數;一元操作符有一個顯式的參數
我們有了public Hour(int iValue)構造函數,就可以將一個int與Hour相加,只是首先要將int轉換成為Hour
hour a=
![](https://www.cnblogs.com/Images/dot.gif)
int b=
![](https://www.cnblogs.com/Images/dot.gif)
Hour sum=a+new Hour(b);
雖然上述代碼完全有效,但相較於讓一個Hour和一個int直接相加它即不清晰也不準確。
為了使Hour可以+ int,必須聲明一個二元操作符+,它的第一個參數是Hour,第二個參數是一個int。
*/
public static Hour operator+ (Hour lhs,int rhs)
{
return lhs + new Hour(rhs);
}
//使一個int 可以+hour。
public static Hour operator +(int lhs, Hour rhs)
{
return new Hour(lhs)+rhs;
}
}
}
示例2:
struct Hour
{
public int iValue;
//構造函數
public Hour(int initialValue)
{
this.iValue = initialValue;
}
//1、定義操作符重載(一元操作符)
public static Hour operator ++ (Hour huValue)
{
huValue.iValue++;
return huValue;
}
//==操作符是二元操作符,必須帶有兩個參數
public static bool operator==(Hour lhs,Hour rhs)
{
return lhs.iValue == rhs.iValue;
}
public static bool operator!=(Hour lhs,Hour rhs)
{
return lhs.iValue != rhs.iValue;
}
}
//++操作符有前綴和后綴的形式,C#能智能地為前綴后后綴使用同一個操作符。
static void Main(string[] args)
{
//2、實例化類
Hour hu = new Hour(10);
//3、
//操作符重載
hu++;
//輸出重載后的結果
Console.WriteLine("Hu++ = {0}", hu.iValue);
//操作符重載
++hu;
//輸出重載后的結果
Console.WriteLine("Hu++ = {0}", hu.iValue);
Console.ReadKey();
}
{
public int iValue;
//構造函數
public Hour(int initialValue)
{
this.iValue = initialValue;
}
//1、定義操作符重載(一元操作符)
public static Hour operator ++ (Hour huValue)
{
huValue.iValue++;
return huValue;
}
//==操作符是二元操作符,必須帶有兩個參數
public static bool operator==(Hour lhs,Hour rhs)
{
return lhs.iValue == rhs.iValue;
}
public static bool operator!=(Hour lhs,Hour rhs)
{
return lhs.iValue != rhs.iValue;
}
}
//++操作符有前綴和后綴的形式,C#能智能地為前綴后后綴使用同一個操作符。
static void Main(string[] args)
{
//2、實例化類
Hour hu = new Hour(10);
//3、
//操作符重載
hu++;
//輸出重載后的結果
Console.WriteLine("Hu++ = {0}", hu.iValue);
//操作符重載
++hu;
//輸出重載后的結果
Console.WriteLine("Hu++ = {0}", hu.iValue);
Console.ReadKey();
}