C#很簡單而又很經(jīng)典的一句代碼實例
一.知識點
二.問題
如果以上四個問題,你很自信,那么以下,您就不要看了,因為我想說的東西真的很簡單。
如果你開始懷疑自己,可以繼續(xù)向下看。你自己到底真的理解嗎???
再看下面這段代碼有沒有問題?
class Program { static void Main(string[] args) { Transform t = new Transform(); t.v.x = 1; t.ShowV(); Console.Read(); } } struct Vector { public float x; public float y; public float z; } class Transform { public Vector v { get; set; } public void ShowV() { Console.WriteLine(v.x+"..."+v.y+"..."+v.z); } }
如果你覺得沒有問題,那么你需要看看。這時候會編譯報錯,為啥,怎么回事。
第6行編譯報錯:
三.分析
如果你非常清楚屬性的本質(zhì)的話,那么上述代碼可以進行轉(zhuǎn)換,將屬性轉(zhuǎn)換為普通方法。(屬性的本質(zhì)就是方法嘛)
class Program { static void Main(string[] args) { Transform t = new Transform(); t.GetVector().x = 1; t.ShowV(); Console.Read(); } } struct Vector { public float x; public float y; public float z; } class Transform { public Vector v; //set public void SetVector(Vector v) { this.v = v; } //get public Vector GetVector() { return v; } public void ShowV() { Console.WriteLine(v.x + "..." + v.y + "..." + v.z); } }
果然上述的改寫只是將屬性的寫法轉(zhuǎn)為本質(zhì)寫法-寫成兩個普通的方法。結(jié)果還是報一樣的編譯錯誤。
,編譯報錯提示還是一樣的CS1612
再修改一下
Transform t = new Transform(); // t.GetVector().x = 10; 這邊編譯報錯 Vector v2 = t.GetVector(); v2.x = 10; t.ShowV(); Console.Read();
編譯打印結(jié)構(gòu)是 0..0..0。
壓根就沒變,當然沒有變啊,因為v2是副本,你更改的只是副本,并沒有改變t中的v,同理,通過t.GetVector()也是一個副本,沒有意義。所以C#語法在對于這種情況,幫我們做了一個處理,如果寫了這樣的代碼,直接給出編譯報錯。C#還是很智能的。就是如果我們錯誤的進行一個無意義的操作,會直接給出提示。這里給C#語法贊一個。
四.雜談
這一段代碼雖然好像很簡單,但是真的藏的很深,樓主工作三年。記得曾經(jīng)有一次去網(wǎng)易二面,被一個大佬問到這個問題,懵逼了,就亂猜吧,一開始說,那個枚舉值中的x只是get,沒有set。然后大佬提示我不是的,然后我才誤打誤撞,恍然大悟,是因為枚舉值傳遞是副本傳遞,再進行賦值操作沒有意義?,F(xiàn)在想想,能出這個問題的大佬,真的很強,一道很簡單的問題,但是考察的東西真的很多很多。
好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對我們的支持。
您可能感興趣的文章
- 01-10C#實現(xiàn)簡單的Login窗口實例
- 01-10Winform消除button按下出現(xiàn)的虛線簡單實現(xiàn)方法
- 01-10winform簡單緩存類實例
- 01-10C#一個簡單的定時小程序?qū)崿F(xiàn)代碼
- 01-10C#圓角窗體簡單實現(xiàn)方法
- 01-10C#使用Mutex簡單實現(xiàn)程序單實例運行的方法
- 01-10C#實現(xiàn)簡單合并word文檔的方法
- 01-10C#簡單實現(xiàn)子窗體向父窗體傳值的方法
- 01-10基于C#實現(xiàn)簡單離線注冊碼生成與驗證
- 01-10C#編程自學之開篇介紹


閱讀排行
本欄相關
- 01-10C#通過反射獲取當前工程中所有窗體并
- 01-10關于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實現(xiàn)txt定位指定行完整實例
- 01-10WinForm實現(xiàn)仿視頻播放器左下角滾動新
- 01-10C#停止線程的方法
- 01-10C#實現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實現(xiàn)讀取注冊表監(jiān)控當前操作系統(tǒng)已
隨機閱讀
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 04-02jquery與jsp,用jquery
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10C#中split用法實例總結(jié)
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10delphi制作wav文件的方法
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05DEDE織夢data目錄下的sessions文件夾有什