中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-08-31 17:20:26 來源:腳本之家 閱讀:148 作者:不三周助 欄目:編程語言

一.知識點

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

二.問題

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

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

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

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行編譯報錯:C#很簡單而又很經典的一句代碼實例

三.分析

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

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

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

 C#很簡單而又很經典的一句代碼實例,編譯報錯提示還是一樣的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。然后大佬提示我不是的,然后我才誤打誤撞,恍然大悟,是因為枚舉值傳遞是副本傳遞,再進行賦值操作沒有意義。現在想想,能出這個問題的大佬,真的很強,一道很簡單的問題,但是考察的東西真的很多很多。

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

瓮安县| 华蓥市| 中牟县| 兴海县| 盘锦市| 忻州市| 广南县| 西华县| 宝清县| 南溪县| 静海县| 永顺县| 波密县| 乐清市| 襄樊市| 东乌| 宁河县| 建德市| 荔波县| 屏东县| 陵川县| 乌兰察布市| 漳浦县| 宜宾县| 贵溪市| 舞阳县| 蚌埠市| 土默特右旗| 望江县| 桐庐县| 新巴尔虎左旗| 大理市| 东明县| 通榆县| 广宗县| 越西县| 静安区| 开平市| 科技| 金寨县| 马尔康县|