亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

這個地方為什么值類型被封裝了?請教大家

這個地方為什么值類型被封裝了?請教大家

慕慕森 2018-12-07 09:19:17
?《CLR via C#(第三版)》中第124頁。    using System; internal struct Point{ private Int32 m_x,m_y; ? public Point(Int32 x,Int32 y){ m_x=x;m_y=y; } ? public void ChangePoint(Int32 x,Int32 y) { m_x=x;m_y=y; } ? public override String ToString() { return String.Format("({0},{1})“,m_x,m_y); } ? } public sealed class Program { public static void Main(){ Point p=new Point(1,1); Console.WriteLine(p); ? p.Change(2,2); Console.WriteLine(p); ? Object o=p; Console.WriteLine(o); ? ((Point)o).Change(3,3); Console.WriteLine(o); } } A、作者說在第一次調用WriteLine之前,p要進行封裝,WriteLine會在已裝箱的Point上調用ToString,并與其的那樣顯示(1,1)?!疚揖蜎]弄懂為什么是在在WriteLine之前就封裝了,不是在WriteLine的時候封裝嗎???】      我理解的是在WriteLine方法的時候進行了封裝。 但是他的意思是在之前就封裝了再WriteLine里面調用了ToString方法,這兒沒有搞懂。。。 B、然后p調用Change方法,把m_xhe m_y都修改為2,第二次調用WriteLine時,要求再次對p進行封裝,并預期的那樣顯示(2,2) 這個我可以理解的。
查看完整描述

3 回答

?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

因為此時WriteLine使用的是 object 參數,那么在調用 WriteLine 之前,需要先把Point轉換為Object類型。WriteLine只負責接收Object類型的參數,這個Object類型的參數是怎么得來的是不由WriteLine來管的。

查看完整回答
反對 回復 2019-01-21
?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

“WriteLine會在已裝箱的Point上調用ToString”

這句話沒問題,裝好箱,WriteLine才能調用ToString。

這名話并沒有說在WriteLine語句執行之前進行裝箱。

這里有一篇不錯的圖文并茂的裝箱方面的文章:

The C# Value Type and Boxing

查看完整回答
反對 回復 2019-01-21
  • 3 回答
  • 0 關注
  • 318 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號