C#关键字 - class和struct

class 用来声明类,struct用来声明结构

 

类 class:

 

是面向对象变成的基本概念,是一种自定义数据的结构类型,通常包括:字段、属性、方法、构造函数、索引器、操作符等等。

类是引用类型,可以继承和被继承,所有的类都继承自System.Object类。

类通过new 来创建对象的实例,这个过程叫做实例化。在new一个类的实例的时候,对象保存了该实例的实际数据的引用地址,而对象的值保存在托管堆中(managed heap)

 

声明:

public class MyClass{}

 

实例化:

MyClass aclass=new MyClass();

 

 

非静态类:通过创建赋给变量的“对象”或“实例”来使用类。

静态类:静态类用sealed来修饰,静态类不能被实例化,只能通过类来访问。

 

 

结构 struct:

 

结构是一种值类型,结构将一组相关的信息变量组织变为一个单一的变量实体。

结构继承自System.ValueType类,是值类型. struct实例分配在线程的堆栈(stack)上,它本身存储了值,但是不包括指向该值的指针。在使用strcut时,我们可以把他当作int, char这样的基本类型来对待。

 

strcut的声明和class相同

声明:

public struct MyStruct{}

 

实例化:

MyStruct astruct=new MyStruct();

 

结构也可以不用new 来进行实例化:

 MyStruct asruct;

但是如果不用new来实例化结构,其所有的字段将会处于未分配状态,只有对字段进行初始化,才能引用,否则,引用未赋值的字段会导致编译错误。如下,此时showMsg()的调用将会出错,只有将i和j都初始化才能对它进行引用,或者用new来实例化。

 

 

 

类和结构的异同点:

 

相同点:语法类似

不同点:

  • class是引用类型,继承自System.Object类;struct是值类型,继承自System.ValueType类。
  • 从职能观点来说,class表现为行为;而struct常用于存储数据
  • class支持类和接口的继承;struct不能从类继承,也不能做类的基类,但是由于strcut是值类型,它支持接口继承
  • class可以声明无参构造函数,可以声明析构函数;struct只能声明带参数的构造函数,而且不能声明析构函数。
  • class必须用new来进行实例化;struct可以不用new来实例化
  • class可以是抽象类,可以声明抽象函数;struct不能为抽象的,不能声明抽象函数
  • class可以声明protected、virtual、sealed和override成员;struct不可以,但是struct可以重载system.object的三个虚方法:Equals()、ToString()个GetHashTable().
  • class实例由垃圾回收机制来保证内存的回收处理;struct的变量在使用完以后立即自动解除内存分配。
  • class的内存分配与托管堆;struct的内存分配与线程的堆栈上。
  • 结构可以作为null的类型,因而可以向其赋null值。
  • 结构在赋值时进行复制。将结构赋值给新的变量时,将复制所有数据,并对新的副本所做的修改不会影响原始副本的数据。
  • 在结构声明中,除非字段被声明为 const 或 static,否则无法初始化???(from MSDN)。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值