类与结构

原创 2008年09月28日 08:22:00

目录
类与结构的实例比较
类与结构的差别
如何选择结构还是类

一.类与结构的示例比较:
结构示例:
public struct Person
{
string Name;
int height;
int weight
public bool overWeight()
{
//implement something
}
}
类示例:
public class TestTime
{
int hours;
int minutes;
int seconds;

public void passtime()
{
//implementation of behavior
}
}
调用过程:
public class Test
{
public static ovid Main
{
Person Myperson=new Person //声明结构
TestTime Mytime=New TestTime //声明类
}
}
从上面的例子中我们可以看到,类的声明和结构的声明非常类似,只是限定符后面是 struct 还是 class 的区别,而且使用时,定义新的结构和定义新的类的方法也非常类似。那么类和结构的具体区别是什么呢?

二 .类与结构的差别
1. 值类型与引用类型
结构是值类型:值类型在堆栈上分配地址,所有的基类型都是结构类型,例如:int 对应System.int32 结构,string 对应 system.string 结构 ,通过使用结构可以创建更多的值类型
类是引用类型:引用类型在堆上分配地址
堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑复杂的对象。所以结构处理作为基类型对待的小对象,而类处理某个商业逻辑
因为结构是值类型所以结构之间的赋值可以创建新的结构,而类是引用类型,类之间的赋值只是复制引用
注:
1.虽然结构与类的类型不一样,可是他们的基类型都是对象(object),c#中所有类型的基类型都是object
2.虽然结构的初始化也使用了New 操作符可是结构对象依然分配在堆栈上而不是堆上,如果不使用“新建”(new),那么在初始化所有字段之前,字段将保持未赋值状态,且对象不可用
2.继承性
结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确的用sealed声明,可是结构是隐式的sealed .
类:完全可扩展的,除非显示的声明sealed 否则类可以继承其他类和接口,自身也能被继承
注:虽然结构不能被继承 可是结构能够继承接口,方法和类继承接口一样
例如:结构实现接口
interface IImage

{
void Paint();
}

struct Picture : IImage
{
public void Paint()
{
// painting code goes here
}
private int x, y, z; // other struct members
}

3.内部结构:
结构:
没有默认的构造函数,但是可以添加构造函数
没有析构函数
没有 abstract 和 sealed(因为不能继承)
不能有protected 修饰符
可以不使用new 初始化
在结构中初始化实例字段是错误的
类:
有默认的构造函数
有析构函数
可以使用 abstract 和 sealed
有protected 修饰符
必须使用new 初始化

三.如何选择结构还是类
讨论了结构与类的相同之处和差别之后,下面讨论如何选择使用结构还是类:
1. 堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些
2. 结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低。
3. 在表现抽象和多级别的对象层次时,类是最好的选择
4. 大多数情况下该类型只是一些数据时,结构时最佳的选择

资料引用:http://www.knowsky.com/337723.html

在dotnet中类(class)与结构(struct)的异同?

Class可以被实例化,属于引用类型,是分配在内存的堆上的。类是引用传递的。 Struct属于值类型,是分配在内存的栈上的。结构体是复制传递的。加分的回答:Int32、Boolean等都属于结构体。...
  • X_X_OO
  • X_X_OO
  • 2016年09月13日 19:45
  • 765

.net中类与结构的区别

转载地址:http://blog.csdn.net/myprogramer/article/details/5912469 参考:http://wenku.baidu.com/view/024755...
  • WDBS_05
  • WDBS_05
  • 2013年02月22日 08:49
  • 644

Asp.net之 类和结构的区别

1、类是引用类型,结构则是值类型。因此结构是放在栈(Stack)里,类则仅仅是将引用地址存放在栈里,而具体的值则存放在堆(heap)里。2、据第1点可以得出结论,那就是类对象通常用来传递大数据,而结构...
  • yhtapmys
  • yhtapmys
  • 2009年10月20日 22:19
  • 772

iOS-浅谈runtime运行时机制01-类与对象的内部结构

最近一直在研究runtime运行时机制的问题,我想可能也有很多人不太清楚这个问题吧?在这里跟大家沟通分享下我对与runtime机制的理解。   要理解runtime,首先我们要了解类和对象的内部结构...
  • yongyinmg
  • yongyinmg
  • 2014年06月19日 17:27
  • 1710

结构和类-结构与类!

  Visual Basic .NET 统一了结构和类的语法,结果就是两个实体都支持大多数的相同功能。但是,在结构和类之间还有着重要的区别。 相同点结构和类在以下方面相同: 两者都属于“容器”类...
  • beyond0309
  • beyond0309
  • 2007年10月26日 22:41
  • 252

C++结构与类

C++的结构和类都是对数据进行了封装。 结构Date 结构Date如下所示: #include using namespace std; struct Date{ ...
  • tnt32
  • tnt32
  • 2012年11月18日 07:53
  • 294

C#---结构与类

C#---结构与类
  • wzcyamadie
  • wzcyamadie
  • 2017年04月17日 20:53
  • 248

十二、java类的结构(属性、方法、构造函数)

上一篇分析了什么是类,并例举了一些例子,这里在继续对类进行分析和讲解。 一、类的定义形式 类定义的一般形式如下 [类定义修饰符] class      {   //类体   [成员变量...
  • liujun13579
  • liujun13579
  • 2012年07月05日 14:50
  • 18548

结构与类

从学生转成职业人士才发现自己在学校掌握的知识太也肤浅,而且这点肤浅东西都没有完全掌握,只得重新从基础学起,最近在读《C#高级编程第六版》以后把点滴的收获写下来   类与结构都是创建对象的模板,每个对象...
  • dabendano
  • dabendano
  • 2009年12月30日 13:49
  • 208

C# 类、结构与扩展方法

C# 类、结构与扩展方法 我并非C#大神,只是用了这么久C#,会对这门语言有着一些自己的简介。为了总结一下自己对C#的认识,也为了能够和大家一起分享学习C#的过程,我打算把我的各种各样的理解写出来。 ...
  • Froser
  • Froser
  • 2014年03月26日 16:55
  • 1716
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:类与结构
举报原因:
原因补充:

(最多只允许输入30个字)