C#面试题

当前位置: 面试问题网 > C#面试题 > 类和结构的区别

类和结构的区别

类:
   类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存
   类有构造和析构函数
   类可以继承和被继承
   结构:
   结构是值类型在栈上分配(虽然栈的访问速度比较堆要快,但栈的资源有限放),结构的赋值将分配产生一个新的对象。
   结构没有构造函数,但可以添加。结构没有析构函数
   结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口
   示例:
   根据以上比较,我们可以得出一些轻量级的对象最好使用结构,但数据量大或有复杂处理逻辑对象最好使用类。
   如:Geoemtry(GIS 里的一个概论,在 OGC 标准里有定义) 最好使用类,而 Geometry 中点的成员最好使用结构
   using System;
   using System.Collections.Generic;
   using System.Text;
   namespace Example16
   {
   interface IPoint
   {
   double X
   {
   get;
   set;
   }
   double Y
   {
   get;
   set;
   }
   double Z
   {
   get;
   set;
   }
   }
   //结构也可以从接口继承
   struct Point: IPoint
   {
   private double x, y, z;
   //结构也可以增加构造函数
   public Point(double X, double Y, double Z)
   {
   this.x = X;
   this.y = Y;
   this.z = Z;
   }
   public double X
   {
   get { return x; }
   set { x = value; }
   }
   public double Y
   {
   get { return x; }
   set { x = value; }
   }
   public double Z
   {
   get { return x; }
   set { x = value; }
   }
   }
   //在此简化了点状Geometry的设计,实际产品中还包含Project(坐标变换)等复杂操作
   class PointGeometry
   {
   private Point value;
   public PointGeometry(double X, double Y, double Z)
   {
   value = new Point(X, Y, Z);
   }
   public PointGeometry(Point value)
   {
   //结构的赋值将分配新的内存
   this.value = value;
   }
   public double X
   {
   get { return value.X; }
   set { this.value.X = value; }
   }
   public double Y
   {
   get { return value.Y; }
   set { this.value.Y = value; }
   }
   public double Z
   {
   get { return value.Z; }
   set { this.value.Z = value; }
   }
   public static PointGeometry operator +(PointGeometry Left, PointGeometry Rigth)
   {
   return new PointGeometry(Left.X + Rigth.X, Left.Y + Rigth.Y, Left.Z + Rigth.Z);
   }
   public override string ToString()
   {
   return string.Format(“X: {0}, Y: {1}, Z: {2}”, value.X, value.Y, value.Z);
   }
   }
   class Program
   {
   static void Main(string[] args)
   {
   Point tmpPoint = new Point(1, 2, 3);
   PointGeometry tmpPG1 = new PointGeometry(tmpPoint);
   PointGeometry tmpPG2 = new PointGeometry(tmpPoint);
   tmpPG2.X = 4;
   tmpPG2.Y = 5;
   tmpPG2.Z = 6;
   //由于结构是值类型,tmpPG1 和 tmpPG2 的坐标并不一样
   Console.WriteLine(tmpPG1);
   Console.WriteLine(tmpPG2);
   //由于类是引用类型,对tmpPG1坐标修改后影响到了tmpPG3
   PointGeometry tmpPG3 = tmpPG1;
   tmpPG1.X = 7;
   tmpPG1.Y = 8;
   tmpPG1.Z = 9;
   Console.WriteLine(tmpPG1);
   Console.WriteLine(tmpPG3);
   Console.ReadLine();
   }
   }
   }
   结果:
   X: 1, Y: 2, Z: 3
   X: 4, Y: 5, Z: 6
   X: 7, Y: 8, Z: 9
   X: 7, Y: 8, Z: 9

【类和结构的区别】相关文章

1. 类和结构的区别

2. 抽象类和接口的区别

3. 是否有自动比较结构的方法

4. 第二层交换机和路由器的区别?第三层交换机和路由器的区别?

5. 介绍一下结构化程序设计方法和面向对象程序设计方法的区别

6. 贵阳社保机构如何核查和结算社保费用

7. 介绍一下SQL注入攻击的种类和防范手段

8. Can a struct inherit from another struct? (结构体能继承结构体吗)

9. 简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程

10. 架构的目标是什么?

本文来源:https://www.mianshiwenti.com/a12995.html

点击展开全部

《类和结构的区别》

将本文的Word文档下载到电脑,方便收藏和打印

推荐程度:

进入下载页面

﹝类和结构的区别﹞相关内容

其它栏目

也许您还喜欢