【.NET深呼吸】基础:自定义类型转换
照例,老周在開始吹牛之前,先講講小故事,這是朋友提出的建議,老TMD寫技術有什么了不起的,人人都會寫。后來老周想想,也確實,代碼誰不會寫,能寫到有品位有感悟,就不容易做到。于是,老周接受了該朋友的建議。
有初入職場的弟弟妹妹們經(jīng)常訴苦,為啥,因為常常被人罵,被老員工罵,被老板罵。好像自己做的事永遠都是錯的,于是感覺很受打擊,很傷心。
這里老周必須提醒各位,小伙子應該堅強一點,小妹妹們也不要過于絕望,千萬不要因為這些事情去做傻事。西湖景觀很美,“欲把西湖比西了,淡妝濃抹總相宜”,但是,如果有人跳西湖自殺的話,真是大煞風景,破壞自然天道。你可不要當這種千古罪人,而且要多想想父母,把你養(yǎng)這么大,你如果覺這種輕生的行為也是孝道的話,那你去死吧,老周不攔你。
初入職場,誰不是天天被人罵的,遙想老周當年,經(jīng)常早上一到辦公室,打開電腦,然后抬頭一看,墻上的紙板上列出了老周上個月的十大罪狀,媽的,寫得像法院判決書似的,那架勢,簡直要吃人的姿態(tài)。
至于那老員工,平時受老板的氣,現(xiàn)在你進來了,不拿你來發(fā)泄找誰去。人最可怕的就是情緒的奴役,尤其是職場上的壓力。而比這更可怕的是,現(xiàn)代人真的在很多地方比不上古人,現(xiàn)在的人遇到不順心的事,不懂得如何去化解和調(diào)整,要么亂來,要么自我毀滅;要么沉迷于酒色,要么沉迷于網(wǎng)絡游戲。究其根本,就是精神世界太空白,平時又不多讀書,人家孔老頭都說了,修身齊家治國平天下,你呢,連修身都沒做好,還吹什么牛逼呢?一屋不掃,何以掃天下?
老周被人罵的時候,就站在那里聽著,聽完后,心里沒有任何感覺,晚上回家讀幾首詩就把白天的事忘得一干二凈了。職場嘛,你應該練就這種本領。
記得老周做得最猛,也最為光榮的一件事,大約在2011年初吧,某天一到辦公室,習慣地抬頭看看紙板,發(fā)現(xiàn)多了幾個寫得很難看的大字——“粗枝大葉”。我就知道經(jīng)理又在說我了。中午下班后,我就到對面馬路找我的朋友,她在那里開了個少兒書畫培訓班。我去她那里找了宣紙和毛筆,然后寫上四個大字——“臥薪嘗膽”,隨后請她吃了飯作為答謝。
下午上班后回到辦公室,我就把剛寫好的幾個大楷直接貼在經(jīng)理寫的幾個丑字上面,然后繼續(xù)工作。
第二天早上,經(jīng)理進來看到了我寫的那幾個大字,就在我耳邊說了句:“你小子,真有你的。” 正好那個時候,老周也想換個環(huán)境,所以老周向經(jīng)理承諾,把近期的項目完成后,寫后各種文檔,以供后面來的人接手,就很灑脫地離開了公司。
老周一直以為,那天經(jīng)理應該生氣了。誰曾想,相隔幾年后,2015年5月,我在親戚的婚宴上偶遇經(jīng)理,以及幾位舊同事。我就很坦白地問經(jīng)理:“那件事,你當時是不是很生氣?”? 經(jīng)理放下筷子,說:“倒不是,是很驚訝。你那幾個字現(xiàn)在還在那里,你有空可以來辦公室看看。”? 然后咱們就聊了些有的沒的一堆閑話,比如搞IT教育如何如何,怎么培訓新員工之類的。我感覺經(jīng)理現(xiàn)在對我的態(tài)度很友善,和幾年前完全相反。
故事講完了,老周只是實話實說,至于說老周做得對不對,你自己參考吧。
=======================================================
?
今天說一個基礎知識,我記得,我的爛書《精通C#》里面介紹過自定義類型轉(zhuǎn)換的內(nèi)容,書名有點夸張,老周不喜歡這名字,但出版社喜歡,我也沒辦法。
實現(xiàn)自定義類型轉(zhuǎn)換可以通過重載運算符來解決。有兩種轉(zhuǎn)換方式:
1、隱式轉(zhuǎn)換:就像子類實例可以直接賦給基類變量一樣,不需要寫任何強制轉(zhuǎn)換的東東,通過賦值就能夠自動轉(zhuǎn)換類型。
2、顯式轉(zhuǎn)換:必須手動寫上強制轉(zhuǎn)換,才能完成類型的轉(zhuǎn)換。比如 int x = (int)dv;
?
好,咱們用實例說話,先來個隱式轉(zhuǎn)換的。
假設我定義了一個Product類,表示一種產(chǎn)品的信息。
public class Product{public int ProID { get; set; }public string ProName { get; set; }public float ProSize { get; set; }}?
我希望實現(xiàn):可以將一個Product類隱式轉(zhuǎn)換為string類型。可在類型中重載轉(zhuǎn)換運算符。
public static implicit operator string(Product p){return $"產(chǎn)品ID = {p.ProID},產(chǎn)品名稱 = {p.ProName},產(chǎn)品尺寸 = {p.ProSize}";}?
和普通運算符重載差不多,都是聲明為公共的,靜態(tài)的,因為運算符是操作類型的,不是針對某個實例而設定的。要實現(xiàn)隱式轉(zhuǎn)換,需要加上implicit關鍵字,轉(zhuǎn)換運算符實際上是要轉(zhuǎn)換的目標類型,此處是string,然后參與運算的操作數(shù)是Product實例。
?
下面,一起來見證一下奇跡。
static void Main(string[] args){Product prd = new Product();prd.ProID = 1001;prd.ProName = "山貨自行車";prd.ProSize = 1.35f;// 隱式轉(zhuǎn)換為字符串string str = prd;// 輸出 Console.WriteLine(str);Console.Read();}?
得到結(jié)果如下。
?
正常情況下,Product實例是不能轉(zhuǎn)換為string的,但由于我上面定義隱式轉(zhuǎn)換的運算符重載,使得這一賦值成為可能。
? string str = prd;
?
如果使用顯式轉(zhuǎn)換,則在使用時必須明確注明強制轉(zhuǎn)換。
假設一個Work類,代碼如下:
public class Work{public int Num1 { get; set; }public int Num2 { get; set; }public static explicit operator int(Work w){return w.Num1 * w.Num2;}}?
顯式轉(zhuǎn)換重載和前面隱式轉(zhuǎn)換差不多,只是要把implicit關鍵字換成explicit關鍵字。下面可以測試一下。
Work wk = new Work();wk.Num1 = 5;wk.Num2 = 7;// 賦值時要強制轉(zhuǎn)換int n = (int)wk;Console.WriteLine($"計算結(jié)果:{n}");?
同樣的,在正常情況下,Work類是復合類型,也不可能強制轉(zhuǎn)換為int值,但由于在類中有自定義轉(zhuǎn)換,所以使用強制轉(zhuǎn)換是可以完成轉(zhuǎn)換的。
?
其實,.net庫中有許多類型也定義了這兩種轉(zhuǎn)換,比如WPF中,動畫時間線對象的Duration屬性就可以TimeSpan進行隱式轉(zhuǎn)換。
別小看這個基本知識點,經(jīng)驗表明,這東東在實際應用中很有用。
?
示例代碼下載
轉(zhuǎn)載于:https://www.cnblogs.com/tcjiaan/p/5042525.html
總結(jié)
以上是生活随笔為你收集整理的【.NET深呼吸】基础:自定义类型转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos7硬盘分区
- 下一篇: WPF利用动画实现圆形进度条