国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#很簡單而又很經典的一句代碼實例

2020-01-24 00:02:13
字體:
來源:轉載
供稿:網友

一.知識點


二.問題

如果以上四個問題,你很自信,那么以下,您就不要看了,因為我想說的東西真的很簡單。

如果你開始懷疑自己,可以繼續向下看。你自己到底真的理解嗎???

再看下面這段代碼有沒有問題?

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行編譯報錯:

三.分析

如果你非常清楚屬性的本質的話,那么上述代碼可以進行轉換,將屬性轉換為普通方法。(屬性的本質就是方法嘛)

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

果然上述的改寫只是將屬性的寫法轉為本質寫法-寫成兩個普通的方法。結果還是報一樣的編譯錯誤。

 ,編譯報錯提示還是一樣的CS1612

再修改一下 

Transform t = new Transform();  // t.GetVector().x = 10; 這邊編譯報錯  Vector v2 = t.GetVector();  v2.x = 10;  t.ShowV();  Console.Read();

編譯打印結構是 0..0..0。

壓根就沒變,當然沒有變啊,因為v2是副本,你更改的只是副本,并沒有改變t中的v,同理,通過t.GetVector()也是一個副本,沒有意義。所以C#語法在對于這種情況,幫我們做了一個處理,如果寫了這樣的代碼,直接給出編譯報錯。C#還是很智能的。就是如果我們錯誤的進行一個無意義的操作,會直接給出提示。這里給C#語法贊一個。

四.雜談

這一段代碼雖然好像很簡單,但是真的藏的很深,樓主工作三年。記得曾經有一次去網易二面,被一個大佬問到這個問題,懵逼了,就亂猜吧,一開始說,那個枚舉值中的x只是get,沒有set。然后大佬提示我不是的,然后我才誤打誤撞,恍然大悟,是因為枚舉值傳遞是副本傳遞,再進行賦值操作沒有意義。現在想想,能出這個問題的大佬,真的很強,一道很簡單的問題,但是考察的東西真的很多很多。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 弥渡县| 卫辉市| 龙南县| 江永县| 万源市| 环江| 郴州市| 临桂县| 乌恰县| 周口市| 乐亭县| 新化县| 宜黄县| 长乐市| 唐山市| 卢湾区| 龙泉市| 灵石县| 睢宁县| 即墨市| 米林县| 日喀则市| 孝义市| 白河县| 荆门市| 大理市| 沅江市| 仙居县| 江油市| 寻甸| 乐业县| 屯留县| 舞阳县| 浏阳市| 中西区| 城口县| 河间市| 松溪县| 云浮市| 龙州县| 绥江县|