类和结构的区别


Posted in 面试题 onAugust 15, 2012
类:
类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存
类有构造和析构函数
类可以继承和被继承
结构:
结构是值类型在栈上分配(虽然栈的访问速度比较堆要快,但栈的资源有限放),结构的赋值将分配产生一个新的对象。
结构没有构造函数,但可以添加。结构没有析构函数
结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口
示例:
根据以上比较,我们可以得出一些轻量级的对象最好使用结构,但数据量大或有复杂处理逻辑对象最好使用类。
如: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

Tags in this post...

面试题 相关文章推荐
请介绍一下Ant
Jul 22 面试题
请用用Java代码写一个堆栈
Jan 26 面试题
编写用C语言实现的求n阶阶乘问题的递归算法
Oct 21 面试题
c语言常见笔试题总结
Sep 05 面试题
一个C/C++编程面试题
Nov 10 面试题
如何高效率的查找一个月以内的数据
Apr 15 面试题
几个Shell Script面试题
Aug 31 面试题
介绍一下linux文件系统分配策略
Feb 25 面试题
如果让你测试一台高速激光打印机,你都会进行哪些测试
Dec 04 面试题
测试时代收集的软件测试面试题
Sep 25 面试题
广州某公司软件工程师面试题
Dec 22 面试题
介绍一下Java中的static关键字
May 12 面试题
什么是反射
Mar 17 #面试题
接口的多继承会带来哪些问题
Aug 17 #面试题
抽象类和接口的区别
Sep 19 #面试题
北京某科技有限公司C# .net笔试题
Sep 27 #面试题
用C#语言写出与SQLSERVER访问时的具体过程
Apr 16 #面试题
用C#语言写出在本地创建一个UDP接收端口的具体过程
Feb 22 #面试题
别名指示符是什么
Oct 08 #面试题
You might like
繁体中文转换为简体中文的PHP函数
2006/10/09 PHP
用PHP制作的意见反馈表源码
2007/03/11 PHP
使用TinyButStrong模板引擎来做WEB开发
2007/03/16 PHP
PHP 将图片按创建时间进行分类存储的实现代码
2010/01/05 PHP
php下通过伪造http头破解防盗链的代码
2010/07/03 PHP
用PHP实现Ftp用户的在线管理
2012/02/16 PHP
PHP重定向与伪静态区别
2017/02/19 PHP
js 连接数据库如何操作数据库中的数据
2012/11/23 Javascript
关于innerHTML后丢失动态绑定的EVENT问题解决方法
2013/05/19 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
JavaScript编写推箱子游戏
2015/07/07 Javascript
跟我学习javascript解决异步编程异常方案
2015/11/23 Javascript
js实现拖拽效果(构造函数)
2015/12/14 Javascript
动态加载js文件简单示例
2016/04/21 Javascript
浅谈JavaScript的push(),pop(),concat()方法
2016/06/03 Javascript
jquery实现自适应banner焦点图
2017/02/16 Javascript
AngularJS 仿微信图片手势缩放的实例
2017/09/28 Javascript
vue组件之Alert的实现代码
2017/10/17 Javascript
js最简单的双向绑定实例讲解
2018/01/02 Javascript
vue 实现全选全不选的示例代码
2018/03/29 Javascript
从源码里了解vue中的nextTick的使用
2018/11/22 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
2019/04/25 Javascript
使用layer弹窗提交表单时判断表单是否输入为空的例子
2019/09/26 Javascript
解决Vue在Tomcat8下部署页面不加载的问题
2019/11/12 Javascript
详解Java中String JSONObject JSONArray List转换
2020/11/13 Javascript
python针对excel的操作技巧
2018/03/13 Python
3种python调用其他脚本的方法
2020/01/06 Python
美国购买当代和现代家具网站:MODTEMPO
2018/07/20 全球购物
编写函数,将一个3*3矩阵转置
2013/10/09 面试题
百度软件工程师职位
2013/02/14 面试题
高三励志标语
2014/06/05 职场文书
个人存款证明书
2014/10/18 职场文书
群众路线领导班子整改方案
2014/10/25 职场文书
2016年优秀共产党员先进事迹材料
2016/02/29 职场文书
《亲亲我的妈妈》观后感(3篇)
2019/09/26 职场文书
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python