类和结构的区别


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...

面试题 相关文章推荐
可以在一个PHP文件里面include另外一个PHP文件两次吗
May 22 面试题
一套Java笔试题
Aug 20 面试题
C语言笔试集
Jul 24 面试题
数组越界问题
Oct 21 面试题
将"引用"作为函数参数有哪些特点
Apr 05 面试题
数据库设计的包括哪两种,请分别进行说明
Jul 15 面试题
linux面试相关问题
Apr 28 面试题
什么是测试驱动开发(TDD)
Feb 15 面试题
几个判断型的面试题
Jul 03 面试题
介绍下java.util.Arrays类
Oct 16 面试题
一套英文Java笔试题面试题
Apr 21 面试题
介绍一些UNIX常用简单命令
Nov 11 面试题
什么是反射
Mar 17 #面试题
接口的多继承会带来哪些问题
Aug 17 #面试题
抽象类和接口的区别
Sep 19 #面试题
北京某科技有限公司C# .net笔试题
Sep 27 #面试题
用C#语言写出与SQLSERVER访问时的具体过程
Apr 16 #面试题
用C#语言写出在本地创建一个UDP接收端口的具体过程
Feb 22 #面试题
别名指示符是什么
Oct 08 #面试题
You might like
亚洲咖啡有什么?亚洲咖啡产地介绍 亚洲咖啡有什么特点?
2021/03/05 新手入门
Yii2.0中的COOKIE和SESSION用法
2016/08/12 PHP
利用PHPExcel读取Excel的数据和导出数据到Excel
2017/05/12 PHP
javascript 尚未实现错误解决办法
2008/11/27 Javascript
Prototype 学习 工具函数学习($方法)
2009/07/12 Javascript
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
2010/04/01 Javascript
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
利用浏览器全屏api实现js全屏
2014/01/16 Javascript
jQuery实现无限往下滚动效果代码
2016/04/16 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
jQuery仿京东商城楼梯式导航定位菜单
2016/07/25 Javascript
jquery+Jscex打造游戏力度条
2020/09/12 Javascript
JS实现的相册图片左右滚动完整实例
2016/11/23 Javascript
jQuery密码强度验证控件使用详解
2017/01/05 Javascript
NodeJS基础API搭建服务器详细过程记录
2017/04/01 NodeJs
jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
2017/04/04 jQuery
VueJS如何引入css或者less文件的一些坑
2017/04/25 Javascript
AngularJS表单验证功能分析
2017/05/26 Javascript
详解在Vue中如何使用axios跨域访问数据
2017/07/07 Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
2018/03/06 Javascript
Vue多组件仓库开发与发布详解
2019/02/28 Javascript
vue3.0中setup使用(两种用法)
2020/12/02 Vue.js
[02:51]2014DOTA2国际邀请赛 IG战队官方纪录片
2014/07/21 DOTA
django项目环境搭建及在虚拟机本地创建django项目的教程
2019/08/02 Python
Python调用scp向服务器上传文件示例
2019/12/22 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
python不同系统中打开方法
2020/06/23 Python
python绘图模块之利用turtle画图
2021/02/12 Python
英国名牌男装店:Standout
2021/02/17 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
2016/08/18 面试题
数学国培研修感言
2014/02/13 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
四年级小学生评语
2014/12/26 职场文书
活动宣传稿范文
2015/07/23 职场文书
升学宴来宾致辞
2015/07/27 职场文书
Minikube搭建Kubernetes集群
2022/03/31 Servers