日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

operator、explicit与implicit

發(fā)布時間:2024/4/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 operator、explicit与implicit 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

說這個之前先說下什么叫隱式轉(zhuǎn)換顯示轉(zhuǎn)換

1、所謂隱式轉(zhuǎn)換,就是系統(tǒng)默認(rèn)的轉(zhuǎn)換,其本質(zhì)是小存儲容量數(shù)據(jù)類型自動轉(zhuǎn)換為大存儲容量數(shù)據(jù)類型。

例如:float f = 1.0; double d=f;這樣就是把float類型的f隱式轉(zhuǎn)換成double類型了!但其實系統(tǒng)幫我們做了類似如下的工作:

float f = 1.0; double d=(double)f;

對于表示數(shù)值的基本數(shù)據(jù)類型來說,數(shù)值范圍小的數(shù)據(jù)類型轉(zhuǎn)換成數(shù)值范圍大的數(shù)據(jù)類型可以進(jìn)行隱式轉(zhuǎn)換,而反過來則必須進(jìn)行顯示轉(zhuǎn)換

2、顯式類型轉(zhuǎn)換,即強制類型轉(zhuǎn)換。與隱式轉(zhuǎn)換相反,而且強制轉(zhuǎn)換會造成數(shù)據(jù)丟失。

例如:double d = 1.456; float f=(float)d;

只要強制指出轉(zhuǎn)換成什么類型,就表示是顯示轉(zhuǎn)換

class Person:Animal{}

Person p=(Person)Animal; //顯示轉(zhuǎn)換

Animal a=p; //隱式轉(zhuǎn)換

對于類類型來說,子類轉(zhuǎn)換成父類可以進(jìn)行隱式轉(zhuǎn)換,而反過來則必須進(jìn)行顯式轉(zhuǎn)換,如果兩個類之間沒有繼承關(guān)系,則不能進(jìn)行隱式轉(zhuǎn)換或顯式轉(zhuǎn)換,此時必須在被轉(zhuǎn)換的類中定義一個隱式轉(zhuǎn)換(implicit)方法或顯式轉(zhuǎn)換(explicit)方法。

基本上是沒有轉(zhuǎn)換表達(dá)式的轉(zhuǎn)換都是隱式轉(zhuǎn)換,比如double a = 1 ;

而int類型顯示轉(zhuǎn)換成double顯示轉(zhuǎn)換就帶有顯示的(double)轉(zhuǎn)換類型doubl a=(double)1;

隱式轉(zhuǎn)換、顯式轉(zhuǎn)換是由對象兼容性而來的。兼容性包含兩個方面,一個是它們之間具有繼承或?qū)崿F(xiàn)接口的關(guān)系。比如A繼承自B,那么B有的東西A肯定有;A實現(xiàn)了B接口,那B規(guī)定的東西A肯定都有。這時候,A都可以隱式轉(zhuǎn)換為B,因為B有的A肯定都有,這是必然的。如果一個對象類型為B,那么則不可以隱式轉(zhuǎn)換為A,因為A有的東西B不一定有;但如果你知道這個類型為B的東西一定是A,那么就可以用顯式轉(zhuǎn)來來轉(zhuǎn)換對象類型。另一種轉(zhuǎn)換則是由對象規(guī)定的運算符,對象可以規(guī)定自己的顯式或隱式運算符,將自己同另外一種對象間相互轉(zhuǎn)換,這是通過運算符重載實現(xiàn)的(也就是接下來要講的explicit(顯示轉(zhuǎn)換)implicit(隱式轉(zhuǎn)換),不怎么常用)。而Parse方法則是對象自帶的方法,你可以看作是和上面的運算符顯式轉(zhuǎn)換相同作用的,不過它是通過定義一個靜態(tài)方法來實現(xiàn)轉(zhuǎn)換。Convert也是這個用處,但是它做的工作比Parse方法一般要多,因此兼容性更好,但是速度也就會稍慢一些。

?

operator、explicit與implicit

operator?關(guān)鍵字用來重載內(nèi)置運算符

class Program{static void Main(string[] args){Person p1 = new Person() { Age = 3 };Person p2 = new Person() { Age = 3 };Console.WriteLine(p1 == p2); //輸出Trueint i = p1;Console.WriteLine(i); //輸出3 Person p3 = (Person)4;Console.WriteLine(p3.Age); //輸出4 Person p4 = p1 + p2;Console.WriteLine(p4.Age);//輸出6 Console.ReadKey();}}public class Person{public int Age { get; set; }public static bool operator ==(Person p1, Person p2){return p1.Age == p2.Age;}public static bool operator !=(Person p1, Person p2){return p1.Age != p2.Age;}public static Person operator +(Person p1, Person p2){return new Person() { Age = p1.Age + p2.Age };}/** 作用:是把Person類型隱式轉(zhuǎn)換成int類型* 使用顯示轉(zhuǎn)換也是可以的 */public static implicit operator int(Person p){return p.Age;}/** 作用:是把int類型顯式轉(zhuǎn)換成Person類型* 使用隱示轉(zhuǎn)換則會報錯,指定顯示轉(zhuǎn)換則必須用顯示轉(zhuǎn)換,不可以用隱式轉(zhuǎn)換*/public static explicit operator Person(int i){return new Person() { Age = i };}}

?

轉(zhuǎn)載于:https://www.cnblogs.com/MrZivChu/p/operator.html

總結(jié)

以上是生活随笔為你收集整理的operator、explicit与implicit的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。