千家信息网

C#类和结构的区别是什么

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,本篇内容主要讲解"C#类和结构的区别是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C#类和结构的区别是什么"吧!C#基础知识之密封类可以有虚函数吗?
千家信息网最后更新 2025年01月19日C#类和结构的区别是什么

本篇内容主要讲解"C#类和结构的区别是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C#类和结构的区别是什么"吧!

C#基础知识之密封类可以有虚函数吗?

可以,基类中的虚函数将隐式的转化为非虚函数,但密封类本身不能再增加新的虚函数

示例:

class BaseClass {   public virtual void F(){   Console.WriteLine("BaseClass.F");  }   sealed class DeriveClass : BaseClass {  //基类中的虚函数F被隐式的转化为非虚函数   //密封类中不能再声明新的虚函数G   public virtual void G(){   Console.WriteLine("DeriveClass.G");  }   }

C#基础知识之如果基类中的虚属性只有一个属性访问器,那么继承类重写该属性后可以有几个属性访问器?如果基类中有 get 和 set 两个呢?

如果基类中的虚属性只有一个属性访问器,那么继承类重写该属性后也应只有一个。如果基类中有 get 和 set 两个属性访问器,那么继承类中可以只有一个也可以同时有两个属性访问器。

C#基础知识之abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?

abstract 修饰符不可以和 static、virtual 和 override 修饰符一起使用

C#基础知识之接口可以包含哪些成员?

接口可以包含属性、方法、索引指示器和事件,但不能包含常量、域、操作符、构造函数和析构函数,而且也不能包含任何静态成员

C#基础知识之类和结构的区别?

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

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

示例:

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

  1. using System;

  2. using System.Collections.Generic;

  3. using System.Text;

  4. namespace Example16 {

  5. interface IPoint {

  6. double X {

  7. get;set;

  8. }

  9. double Y {

  10. get;set;

  11. } double Z {

  12. get;set;

  13. }

  14. //结构也可以从接口继承struct Point: IPoint {

  15. private double x, y, z;

  16. //结构也可以增加构造函数

  17. public Point(double X, double Y, double Z){

  18. this.x = Xthis.y = Ythis.z = Z

  19. }

  20. public double X { get { return x;

  21. }

  22. set { x = value

  23. }

  24. }

  25. public double Y {

  26. get { return x;

  27. }

  28. set { x = value

  29. }

  30. }

  31. public double Z {

  32. get { return x;

  33. }

  34. set { x = value

  35. }

  36. }

  37. //在此简化了点状Geometry的设计,实际产品中还包含Project(坐标变换)
    等复杂操作class PointGeometry {

  38. private Point value;

  39. public PointGeometry(double X, double Y, double Z){

  40. value = new Point(X, Y, Z);

  41. }

  42. public PointGeometry(Point value){

  43. //结构的赋值将分配新的内存this.value = value;

  44. }

  45. public double X { get { return value.X;

  46. }

  47. set {

  48. this.value.X = value;

  49. }

  50. }

  51. public double Y { get { return value.Y;

  52. }

  53. set { this.value.Y = value;

  54. }

  55. }

  56. public double Z { get { return value.Z;

  57. } set { this.value.Z = value;

  58. }

  59. }

  60. public static PointGeometry operator +(PointGeometry Left, PointGeometry Rigth){

  61. return new PointGeometry(Left.X + Rigth.X, Left.Y + Rigth.Y, Left.Z + Rigth.Z);

  62. }

  63. public override string ToString(){

  64. return string.Format("X: {0}, Y: {1}, Z: {2}", value.X, value.Y, value.Z);

  65. }

  66. class Program {

  67. static void Main(string[] args){

  68. Point tmpPoint = new Point(1, 2, 3);

  69. PointGeometry tmpPG1 = new PointGeometry(tmpPoint);

  70. PointGeometry tmpPG2 = new PointGeometry(tmpPoint);

  71. tmpPG2.X = 4tmpPG2.Y = 5tmpPG2.Z = 6

  72. //由于结构是值类型,tmpPG1 和 tmpPG2 的坐标并不一样Console.WriteLine(tmpPG1);

  73. Console.WriteLine(tmpPG2);

  74. //由于类是引用类型,对tmpPG1坐标修改后影响到了tmpPG3 PointGeometry tmpPG3 = tmpPG1

  75. tmpPG1.X = 7

  76. tmpPG1.Y = 8

  77. tmpPG1.Z = 9

  78. Console.WriteLine(tmpPG1);

  79. Console.WriteLine(tmpPG3);

  80. Console.ReadLine();

  81. }

到此,相信大家对"C#类和结构的区别是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0