C#类和结构简单介绍

C#语言还是比较常见的东西,这里我们主要介绍C#类和结构,包括介绍C#类和结构示例等方面。

创新互联是一家专注于网站设计制作、成都网站设计与策划设计,谷城网站建设哪家好?创新互联做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:谷城等地区。谷城做网站价格咨询:028-86922220

C#类和结构的区别

类:
◆类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存
◆类有构造和析构函数
◆类可以继承和被继承

结构:
◆结构是值类型在栈上分配(虽然栈的访问速度比较堆要快,但栈的资源有限放),结构的赋值将分配产生一个新的对象。
◆结构没有构造函数,但可以添加。结构没有析构函数。
◆结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口。

C#类和结构示例:
根据以上比较,我们可以得出一些轻量级的对象***使用结构,但数据量大或有复杂处理逻辑对象***使用类。如:Geoemtry(GIS 里的一个概论,在 OGC 标准里有定义) ***使用类,而 Geometry 中点的成员***使用结构。

 
 
 
  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. //结构也可以从接口继承
  26. struct Point: IPoint
  27. {
  28. private double x, y, z;
  29. //结构也可以增加构造函数
  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. //在此简化了点状Geometry的设计,实际产品中还包含Project(坐标变换)等复杂操作
  53. class PointGeometry
  54. {
  55. private Point value;
  56. public PointGeometry(double X, double Y, double Z)
  57. {
  58. value = new Point(X, Y, Z);
  59. }
  60. public PointGeometry(Point value)
  61. {
  62. //结构的赋值将分配新的内存
  63. this.value = value;
  64. }
  65. public double X
  66. {
  67. get { return value.X; }
  68. set { this.value.X = value; }
  69. }
  70. public double Y
  71. {
  72. get { return value.Y; }
  73. set { this.value.Y = value; }
  74. }
  75. public double Z
  76.  {
  77. get { return value.Z; }
  78. set { this.value.Z = value; }
  79. }
  80. public static PointGeometry operator +(PointGeometry Left, PointGeometry Rigth)
  81. {
  82. return new PointGeometry(Left.X + Rigth.X, Left.Y + Rigth.Y, Left.Z + Rigth.Z);
  83. }
  84. public override string ToString()
  85. {
  86. return string.Format("X: {0}, Y: {1}, Z: {2}", value.X, value.Y, value.Z);
  87. }
  88. }
  89. class Program
  90. {
  91. static void Main(string[] args)
  92. {
  93. Point tmpPoint = new Point(1, 2, 3);
  94.  
  95. PointGeometry tmpPG1 = new PointGeometry(tmpPoint);
  96. PointGeometry tmpPG2 = new PointGeometry(tmpPoint);
  97. tmpPG2.X = 4;
  98. tmpPG2.Y = 5;
  99. tmpPG2.Z = 6;
  100.  
  101. //由于结构是值类型,tmpPG1 和 tmpPG2 的坐标并不一样
  102. Console.WriteLine(tmpPG1);
  103. Console.WriteLine(tmpPG2);
  104.  
  105. //由于类是引用类型,对tmpPG1坐标修改后影响到了tmpPG3
  106. PointGeometry tmpPG3 = tmpPG1;
  107. tmpPG1.X = 7;
  108. tmpPG1.Y = 8;
  109. tmpPG1.Z = 9;
  110. Console.WriteLine(tmpPG1);
  111. Console.WriteLine(tmpPG3);
  112.  
  113. Console.ReadLine();
  114. }
  115. }
  116. }

文章题目:C#类和结构简单介绍
网页路径:http://www.mswzjz.cn/qtweb/news13/19613.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能