C#中类和结构的区别

原创 2007年09月14日 16:10:00
二 .类与结构的差别

  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.大多数情况下该类型只是一些数据时,结构是最佳的选择  

[C#]结构体和类的区别

 结构体和类的区别:     在做一个项目时,使用了较多的结构体,并且存在一些结构体的嵌套,即某结构体成员集合包含另一个结构体等,总是出现一些奇怪的错误,才终于下决心好好分析一下到底类和结构体...
  • Andrewniu
  • Andrewniu
  • 2016年08月02日 14:14
  • 832

C#中的结构体与类的区别

经常听到有朋友在讨论C#中的结构与类有什么区别.正好这几日闲来无事,自己总结一下,希望大家指点. 1. 首先是语法定义上的区别啦,这个就不用多说了.定义类使用关键字class 定义结构使用关键字st...
  • dyllove98
  • dyllove98
  • 2013年07月15日 21:24
  • 19817

C#中类与结构的区别

一.类与结构的示例比较: 结构示例: public struct Person { string Name; int height; int weight public bool overW...
  • gxq741718618gxq
  • gxq741718618gxq
  • 2013年02月22日 17:21
  • 5710

C#中结构体和类的区别

结构体和类同样能够定义字段,方法和构造函数,都能实例化对象,这样看来结构体和类的功能好像是一样的了,但是他们在数据的存储上是不一样的 C#结构体和类的区别问题:这两种数据类型的本质区别主要是...
  • Circle__Gossoon
  • Circle__Gossoon
  • 2016年08月05日 10:24
  • 916

类和结构的区别

区别如下: 1.存储类型:结构是值类型,存储在
  • yikeshu19900128
  • yikeshu19900128
  • 2014年10月23日 17:02
  • 1814

结构体和类的区别

结构体和类的区别:     在做一个项目时,使用了较多的结构体,并且存在一些结构体的嵌套,即某结构体成员集合包含另一个结构体等,总是出现一些奇怪的错误,才终于下决心好好分析一下到底类和结构体有啥不同...
  • u013341034
  • u013341034
  • 2016年03月14日 11:34
  • 2632

C#中类和结构的区别!

目录: Ø 类和结构的示例比较 Ø 类和结构的差别 Ø 如何选择使用类还是使用结构 一 类和结构的示例比较 结构示例:  ...
  • u014739805
  • u014739805
  • 2014年04月30日 23:02
  • 232

C# 类与结构的区别

类与结构的区别 C++中结构与类的唯一区别是在于默认的访问级别,但是C#中的区别就稍微多了点,C#中如下 (1)类是引用类型,结构是值类型。 类中: public class Person {...
  • zhuhuangtianzi
  • zhuhuangtianzi
  • 2014年03月20日 22:26
  • 809

C# 类和结构的区别

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...
  • yy763496668
  • yy763496668
  • 2016年03月23日 22:53
  • 156

c#中结构与类的区别

c#中结构与类的区别 一.类与结构的示例比较: 结构示例: public struct Person {    string Name;    int  hei...
  • jiangfei009003
  • jiangfei009003
  • 2013年03月29日 11:07
  • 494
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#中类和结构的区别
举报原因:
原因补充:

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