C#運(yùn)算符重載“>”的操作淺析
C#運(yùn)算符重載“>”的操作問(wèn)題的出現(xiàn):今天一個(gè)同學(xué)在做ProjectHoshimi的時(shí)候,自己在封裝一個(gè)對(duì)象庫(kù)。
希望使用C#運(yùn)算符重載>的操作,語(yǔ)法正確,但是總是不能成功。
按照MSDN C# Keyword opeartor定義可以有下面的語(yǔ)法構(gòu)成
- public static result-type operator unary-operator ( op-type operand )
- public static result-type operator binary-operator (
- op-type operand,
- op-type2 operand2
- )
- public static implicit operator conv-type-out ( conv-type-in operand
- )
- public static explicit operator conv-type-out (
- conv-type-in operand
- )
那么下面代碼就是正確的
- class A {
- private int a;
- public static bool operator>(A a,A b){
- return a.a > b.a;
- }
- public A(int value) {
- a = value;
- }
- }
C#運(yùn)算符重載“>”的操作問(wèn)題再次提出:為什么不能成功編譯呢?因?yàn)?gt;運(yùn)算符在.NET Framework中不允許但對(duì)出現(xiàn),如下代碼就是正確的。
- class A {
- private int a;
- public static bool operator>(A a,A b){
- return a.a > b.a;
- }
- public static bool operator <(A a, A b) {
- return a.a < b.a;
- }
- public A(int value) {
- a = value;
- }
為什么需要這樣做呢?
其實(shí)我覺(jué)得這個(gè)就是C#在設(shè)計(jì)上面默認(rèn)了一些讓系統(tǒng)編碼更安全的一些約束。如果沒(méi)有這樣的約束,那么可能是>重載了,但是<沒(méi)有重載,但是如果有人使用將會(huì)發(fā)現(xiàn)很未知的錯(cuò)誤。
C#運(yùn)算符重載“>”的操作的基本情況就向你介紹到這里,希望對(duì)你了解C#運(yùn)算符重載“>”的操作有所幫助。
【編輯推薦】