基于運算符重載的那些事
由于對運算符重載不是多么理解誒,于是就百度了一下,結(jié)果發(fā)現(xiàn)一個解釋很有趣的百度知道,分享看看。
回答:
+-*/這樣的運算符重定義,比如你自定義了一個類a,然后你可以自己重載它的這些運算符,比如+返回什么,-返回什么等等。
大概這個意思。
追問:
大俠,說真的沒看明白,能不能更通俗點
回答:
像這樣,如你現(xiàn)在創(chuàng)建了一個自定義類叫 蘋果,正常情況下,如果你定義二個變量 蘋果A和蘋果B實例化它們,然后你想知道 蘋果A-蘋果B 能得到什么,默認(rèn)這二個變量是不能直接運算的,如果你要實現(xiàn) 蘋果 類的 "-" 運算,那么你必須重載它的 運算符"-",然后自己在里面實現(xiàn)你的操作。 比如 你可以實現(xiàn)說兩個不同的菜果相減返回一個爛蘋果或返回null
追問:
大俠,能否就你說的這個蘋果類,對其的“-”運算符進(jìn)行重載,結(jié)果得出兩個蘋果的質(zhì)量差,煩請您在寫出這個Demo,最好寫詳細(xì)點,加個注釋什么的,謝謝了,就當(dāng)帶個徒弟咯,
(*^__^*) 嘻嘻……
回答:
public class Apple{
public decimal Weight{get;set;}
public static decimal operator +(Apple a1, Apple a2)
{
return a1.Weight-a2.Weight;
}
}
Apple a=new Apple{Weight=200};
Apple b=new Apple{Weight=300};
Console.Write(b-a);
試試這個可以不。
追問:
謝謝,為了這個問答更完美,我修改下回答者得一些疏漏:
上面代碼第三行應(yīng)該是“-”號,更正下
public static decimal operator - (Apple a1, Apple a2)
下面這三句應(yīng)該放在Main()函數(shù)中,這樣就完美了
---------------------------------
Apple a=new Apple{Weight=200};
Apple b=new Apple{Weight=300};
Console.Write(b-a);
--------------------------------
二樓:
我覺得樓上兩位說的很好,很明確了,我換一種方式解釋一下。
要回答樓主的問題,那么就要先明確2個概念,運算符,重載
運算符
運算符指的就是+、-、*、/ 等此類用于算術(shù)運算的符號,這些符號在寫在程序代碼里面,我們的編譯器可以識別出來,是因為我們已經(jīng)為編譯器定義好了規(guī)矩(語法),所以你會發(fā)現(xiàn)有些有些東西可以用+連接,而有些卻不行,那是因為系統(tǒng)沒有自定這樣的規(guī)矩。
重載
重載一個語言特性,意思就是說,編程語言允許存在多個個名字一樣,但是參數(shù)不一樣的方法(函數(shù))。隨手寫寫兩個方法看看:
int Add(int a,int b);
double Add(double a,double b);
我們定義了兩個Add方法,但是他們的參數(shù)不一樣,這是合法,這個時候我們就可以說Add方法有2個“重載”。
現(xiàn)在,假如你把Add方法看作是“+”號,那么這個運算符重載的意思不就出來了嗎,“+”號可以加兩個整形(int)數(shù),也可以加兩個雙精度(double)數(shù),就是因為有運算符重載這種特性!
通過運算符重載,你能讓“+”讓所有的東東都能相加在一起!
三樓:
示例已經(jīng)有人給了,我通俗地講您通俗地聽吧。
咱們都知道1+1=2,是因為數(shù)學(xué)家是這么規(guī)定的,我們也是這么學(xué)的。而且只要您在地球上就不會有人來推翻這個結(jié)論,除非他很無知無聊。
設(shè)計一門語言的時候只能把那些最普遍的規(guī)律實現(xiàn)出來,至于那些特殊的規(guī)律需要讓這些規(guī)律的制定者去實現(xiàn)。
比如說 “馬+馬=馬”;“驢+馬=騾子” 這或許還在常理之中??赡苡泄痔x“人+妖=人妖”……
計算機能認(rèn)識數(shù)值已經(jīng)很不錯了。您也不會期待它能認(rèn)識“馬”是什么東西吧。這時候您定義了一個類,類的名字叫做“馬”。并在里面寫了一些“馬”的屬性。漸漸地馬的形象就飽滿了。計算機終于能認(rèn)識“馬”了??墒?ldquo;馬”實例化出來的對象它不是數(shù)值,計算機不知道“馬+馬”等于什么,這時候您就需要為“馬”制定四則運算。于是乎電腦又知道了“公馬”+“母馬”=“小馬駒”。這是同類對象的運算符重載。
然后您又定義了“驢”這個類。電腦也認(rèn)識“驢”了。
最后您還需要定義“驢+馬=騾子”,這就是不同類對象的運算符重載了。
其實string對象的+運算就是最簡單最常用的運算符重載了。甚至int+double在C#中也是需要定義的。
相關(guān)文章
C#編程中常見數(shù)據(jù)結(jié)構(gòu)的比較(Unity3D游戲開發(fā))
在本篇內(nèi)容里我們給大家整理了關(guān)于Unity3D游戲開發(fā)中C#編程中常見數(shù)據(jù)結(jié)構(gòu)的比較相關(guān)知識點內(nèi)容,需要的朋友們參考下。2019-05-05
C#實現(xiàn)將TextBox綁定為KindEditor富文本
KindEditor?依靠出色的用戶體驗和領(lǐng)先的技術(shù)提供富文本編輯功能,是一款非常受歡迎的HTML在線編輯器,下面我們就來看看C#如何將TextBox綁定為KindEditor富文本吧2024-04-04
C#通過Win32API設(shè)置客戶端系統(tǒng)時間的方法詳解
在日常工作中,有時可能會需要獲取或修改客戶端電腦的系統(tǒng)時間,比如軟件設(shè)置了Licence有效期,本文以一個簡單的小例子,簡述如何通過C#獲取和設(shè)置客戶端電腦的系統(tǒng)時間,僅供學(xué)習(xí)分享使用,如有不足之處,還請指正,需要的朋友可以參考下2024-06-06
C#創(chuàng)建數(shù)據(jù)庫及導(dǎo)入sql腳本的方法
這篇文章主要介紹了C#創(chuàng)建數(shù)據(jù)庫及導(dǎo)入sql腳本的方法,涉及C#針對數(shù)據(jù)庫的創(chuàng)建、連接、導(dǎo)入等相關(guān)操作技巧,需要的朋友可以參考下2015-12-12

