自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#類和結(jié)構(gòu)簡單介紹

開發(fā) 后端
這里介紹C#類和結(jié)構(gòu),一些輕量級的對象最好使用結(jié)構(gòu),但數(shù)據(jù)量大或有復(fù)雜處理邏輯對象最好使用類。如:Geoemtry最好使用類,而 Geometry 中點(diǎn)的成員最好使用結(jié)構(gòu)。

C#語言還是比較常見的東西,這里我們主要介紹C#類和結(jié)構(gòu),包括介紹C#類和結(jié)構(gòu)示例等方面。

C#類和結(jié)構(gòu)的區(qū)別

類:
◆類是引用類型在堆上分配,類的實(shí)例進(jìn)行賦值只是復(fù)制了引用,都指向同一段實(shí)際對象分配的內(nèi)存
◆類有構(gòu)造和析構(gòu)函數(shù)
◆類可以繼承和被繼承

結(jié)構(gòu):
◆結(jié)構(gòu)是值類型在棧上分配(雖然棧的訪問速度比較堆要快,但棧的資源有限放),結(jié)構(gòu)的賦值將分配產(chǎn)生一個(gè)新的對象。
◆結(jié)構(gòu)沒有構(gòu)造函數(shù),但可以添加。結(jié)構(gòu)沒有析構(gòu)函數(shù)。
◆結(jié)構(gòu)不可以繼承自另一個(gè)結(jié)構(gòu)或被繼承,但和類一樣可以繼承自接口。

C#類和結(jié)構(gòu)示例:
根據(jù)以上比較,我們可以得出一些輕量級的對象***使用結(jié)構(gòu),但數(shù)據(jù)量大或有復(fù)雜處理邏輯對象***使用類。如:Geoemtry(GIS 里的一個(gè)概論,在 OGC 標(biāo)準(zhǔn)里有定義) ***使用類,而 Geometry 中點(diǎn)的成員***使用結(jié)構(gòu)。

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4.    
  5. namespace Example16  
  6. {  
  7. interface IPoint  
  8. {  
  9. double X  
  10. {  
  11. get;  
  12. set;  
  13. }  
  14. double Y  
  15. {  
  16. get;  
  17. set;  
  18. }  
  19. double Z  
  20. {  
  21. get;  
  22. set;  
  23. }  
  24. }  
  25. //結(jié)構(gòu)也可以從接口繼承  
  26. struct Point: IPoint  
  27. {  
  28. private double x, y, z;  
  29. //結(jié)構(gòu)也可以增加構(gòu)造函數(shù)  
  30. public Point(double X, double Y, double Z)  
  31. {  
  32. this.x = X;  
  33. this.y = Y;  
  34. this.z = Z;  
  35. }  
  36. public double X  
  37. {  
  38. get { return x; }  
  39. set { x = value; }  
  40. }  
  41. public double Y  
  42. {  
  43. get { return x; }  
  44. set { x = value; }  
  45. }  
  46. public double Z  
  47. {  
  48. get { return x; }  
  49. set { x = value; }  
  50. }  
  51. }  
  52. //在此簡化了點(diǎn)狀Geometry的設(shè)計(jì),實(shí)際產(chǎn)品中還包含Project(坐標(biāo)變換)等復(fù)雜操作  
  53. class PointGeometry  
  54. {  
  55. private Point value;  
  56.  
  57. public PointGeometry(double X, double Y, double Z)  
  58. {  
  59. value = new Point(X, Y, Z);  
  60. }  
  61. public PointGeometry(Point value)  
  62. {  
  63. //結(jié)構(gòu)的賦值將分配新的內(nèi)存  
  64. this.value = value;  
  65. }  
  66. public double X  
  67. {  
  68. get { return value.X; }  
  69. set { this.value.X = value; }  
  70. }  
  71. public double Y  
  72. {  
  73. get { return value.Y; }  
  74. set { this.value.Y = value; }  
  75. }  
  76. public double Z  
  77.  {  
  78. get { return value.Z; }  
  79. set { this.value.Z = value; }  
  80. }  
  81. public static PointGeometry operator +(PointGeometry Left, PointGeometry Rigth)  
  82. {  
  83. return new PointGeometry(Left.X + Rigth.X, Left.Y + Rigth.Y, Left.Z + Rigth.Z);  
  84. }  
  85. public override string ToString()  
  86. {  
  87. return string.Format("X: {0}, Y: {1}, Z: {2}", value.X, value.Y, value.Z);  
  88. }  
  89. }  
  90. class Program  
  91. {  
  92. static void Main(string[] args)  
  93. {  
  94. Point tmpPoint = new Point(1, 2, 3);  
  95.    
  96. PointGeometry tmpPG1 = new PointGeometry(tmpPoint);  
  97. PointGeometry tmpPG2 = new PointGeometry(tmpPoint);  
  98. tmpPG2.X = 4;  
  99. tmpPG2.Y = 5;  
  100. tmpPG2.Z = 6;  
  101.    
  102. //由于結(jié)構(gòu)是值類型,tmpPG1 和 tmpPG2 的坐標(biāo)并不一樣  
  103. Console.WriteLine(tmpPG1);  
  104. Console.WriteLine(tmpPG2);  
  105.    
  106. //由于類是引用類型,對tmpPG1坐標(biāo)修改后影響到了tmpPG3  
  107. PointGeometry tmpPG3 = tmpPG1;  
  108. tmpPG1.X = 7;  
  109. tmpPG1.Y = 8;  
  110. tmpPG1.Z = 9;  
  111. Console.WriteLine(tmpPG1);  
  112. Console.WriteLine(tmpPG3);  
  113.    
  114. Console.ReadLine();  
  115. }  
  116. }  

【編輯推薦】

  1. C#靜態(tài)變量簡單分析
  2. C# sealed修飾符學(xué)習(xí)筆記
  3. C# const和static readonly區(qū)別淺談
  4. C#隱含類型局部變量淺析
  5. C#對象初始化器描述
責(zé)任編輯:佚名 來源: 博客園
相關(guān)推薦

2009-08-06 14:53:41

C# User類

2009-09-02 14:33:57

C#類實(shí)現(xiàn)接口

2009-09-07 16:09:19

C#和Java特點(diǎn)

2009-08-07 09:29:22

C#數(shù)組C#函數(shù)

2009-08-18 16:57:24

VB.NET和C#

2009-08-20 18:44:54

C#和ADO.NET

2009-08-27 16:18:47

C#類C#結(jié)構(gòu)體

2009-08-12 09:41:28

C# Director

2009-09-03 15:57:11

C# SystemMe

2009-08-07 17:41:40

C#預(yù)處理

2009-08-27 10:19:22

C#匿名類型

2009-08-10 16:19:37

C#冒泡排序

2009-08-14 17:27:56

C#方法參數(shù)

2009-08-18 17:37:57

C#固定指針

2009-08-21 17:55:52

C#復(fù)合控件

2009-09-01 16:19:57

C# new()約束

2009-08-03 17:51:43

C#引用類型

2009-08-06 18:15:13

C# SQL Serv

2009-08-07 17:12:07

C# DLL函數(shù)

2009-08-13 17:36:54

編譯C#代碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號