a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

基于運算符重載的那些事

2020-01-24 03:22:01
字體:
來源:轉載
供稿:網友

由于對運算符重載不是多么理解誒,于是就百度了一下,結果發現一個解釋很有趣的百度知道,分享看看。

復制代碼 代碼如下:

回答:
+-*/這樣的運算符重定義,比如你自定義了一個類a,然后你可以自己重載它的這些運算符,比如+返回什么,-返回什么等等。
public class a{
    public string t{get;set;}
    public static a operator +(a a1, a a2)
   {
         a b=new a();
         b.t=a1.t+a2.t;
         return b;
   }
}

大概這個意思。

追問:

    大俠,說真的沒看明白,能不能更通俗點

回答:

    像這樣,如你現在創建了一個自定義類叫 蘋果,正常情況下,如果你定義二個變量 蘋果A和蘋果B實例化它們,然后你想知道 蘋果A-蘋果B 能得到什么,默認這二個變量是不能直接運算的,如果你要實現 蘋果 類的 "-" 運算,那么你必須重載它的 運算符"-",然后自己在里面實現你的操作。 比如 你可以實現說兩個不同的菜果相減返回一個爛蘋果或返回null

追問:

    大俠,能否就你說的這個蘋果類,對其的“-”運算符進行重載,結果得出兩個蘋果的質量差,煩請您在寫出這個Demo,最好寫詳細點,加個注釋什么的,謝謝了,就當帶個徒弟咯,
    (*^__^*) 嘻嘻……

回答:

    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);

    試試這個可以不。

追問:

    謝謝,為了這個問答更完美,我修改下回答者得一些疏漏:
    上面代碼第三行應該是“-”號,更正下
    public static decimal operator - (Apple a1, Apple a2)

    下面這三句應該放在Main()函數中,這樣就完美了
    ---------------------------------
    Apple a=new Apple{Weight=200};
    Apple b=new Apple{Weight=300};
    Console.Write(b-a);
    --------------------------------


二樓:

我覺得樓上兩位說的很好,很明確了,我換一種方式解釋一下。
要回答樓主的問題,那么就要先明確2個概念,運算符,重載
 運算符
運算符指的就是+、-、*、/ 等此類用于算術運算的符號,這些符號在寫在程序代碼里面,我們的編譯器可以識別出來,是因為我們已經為編譯器定義好了規矩(語法),所以你會發現有些有些東西可以用+連接,而有些卻不行,那是因為系統沒有自定這樣的規矩。
 重載
重載一個語言特性,意思就是說,編程語言允許存在多個個名字一樣,但是參數不一樣的方法(函數)。隨手寫寫兩個方法看看:
int Add(int a,int b);
double Add(double a,double b);
我們定義了兩個Add方法,但是他們的參數不一樣,這是合法,這個時候我們就可以說Add方法有2個“重載”。

現在,假如你把Add方法看作是“+”號,那么這個運算符重載的意思不就出來了嗎,“+”號可以加兩個整形(int)數,也可以加兩個雙精度(double)數,就是因為有運算符重載這種特性!

通過運算符重載,你能讓“+”讓所有的東東都能相加在一起!

三樓:

示例已經有人給了,我通俗地講您通俗地聽吧。
咱們都知道1+1=2,是因為數學家是這么規定的,我們也是這么學的。而且只要您在地球上就不會有人來推翻這個結論,除非他很無知無聊。
像這些普遍存在的規律已經被廣大人民群眾所接納了,作為一門程序語言的設計者,他們肯定也會按照常識來設計語言。所以在任何一門語言中1+1=2都是成立的。程序能認識1跟2是兩個數,還能認識+,-,x,÷四則運算。凡是數值的四則運算都會符合人們的正常思維習慣得到正確的結果。電腦之所以能正確地處理數值的四則運算歸根到底不是因為電腦具有人工智能。而是程序語言的設計者已經為程序設計好了解釋規則。電腦只是按照這種規則處理數據。

設計一門語言的時候只能把那些最普遍的規律實現出來,至于那些特殊的規律需要讓這些規律的制定者去實現。

比如說 “馬+馬=馬”;“驢+馬=騾子” 這或許還在常理之中。可能有怪胎會定義“人+妖=人妖”……
計算機能認識數值已經很不錯了。您也不會期待它能認識“馬”是什么東西吧。這時候您定義了一個類,類的名字叫做“馬”。并在里面寫了一些“馬”的屬性。漸漸地馬的形象就飽滿了。計算機終于能認識“馬”了。可是“馬”實例化出來的對象它不是數值,計算機不知道“馬+馬”等于什么,這時候您就需要為“馬”制定四則運算。于是乎電腦又知道了“公馬”+“母馬”=“小馬駒”。這是同類對象的運算符重載。
然后您又定義了“驢”這個類。電腦也認識“驢”了。
最后您還需要定義“驢+馬=騾子”,這就是不同類對象的運算符重載了。

其實string對象的+運算就是最簡單最常用的運算符重載了。甚至int+double在C#中也是需要定義的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 日韩黄色在线观看 | 欧美精品不卡 | 91精品国产日韩91久久久久久 | 人人草人人干 | 欧美视频在线一区 | 天堂资源最新在线 | 午夜精品久久久久久久久久蜜桃 | 国产一区不卡 | 午夜影院在线观看免费 | 91香蕉视频在线观看 | 在线观看你懂的视频 | 欧美理论在线观看 | 久久久久久久国产精品 | 国产在线观看av | 99精品全国免费观看视频软件 | 国产成人精品一区二区三区 | 成人在线精品视频 | 欧美一区久久 | 国产精品日韩在线 | 国产成人精品亚洲日本在线桃色 | 久久久久久中文字幕 | 在线精品亚洲 | 欧美成人一区二区三区片免费 | 九九精品久久久 | 亚洲最大成人 | 午夜激情在线 | 久久国产麻豆 | 国产综合亚洲精品一区二 | 日韩视频在线观看 | 国产精品久久久久久久久久东京 | 免费av在线播放 | 超碰超碰在线观看 | 日本不卡在线视频 | 日韩欧美手机在线 | av资源中文在线 | 久久888| 尹人成人| 日韩成人国产 | 黄色影院免费观看 | 日韩精品在线一区 | 日韩一区二区三区在线播放 |