C# 结构与类的区别

1、实例在内存中的位置以及内存回收

值类型的局部变量都保存在栈中,为引用类型的局部变量都保存在堆中。结构都是值类型,其实例都保存在栈中。

对结构类型变量进行赋值,意味着对所有的值创建一个新副本。只有创建引用类型的实例才能触发内存回收,所以创建结构实例不会引发内存回收,除非在结构的构造函数中直接或间接地创建一个引用类型的实例。

当把结构作为参数传递给一个方法时,传递前要复制它的一个完成副本,传递给方法的是它的副本。而类对象作为参数传递给一个方法时,传递的是类对象的引用。因此结构越复杂,复制造成的性能开销越大。所以,结构应该只用来表示小的数据结构。

2、结构不支持继承

结构不能使用sealed声明,类可以;

结构不能再构造函数中调用base(),类可以;

结构不能扩展其他类,类可以;

结构的成员不能使用protected修饰符来修饰,类可以;

结构的成员函数不能声明为abstract,不可以使用sealed声明,类可以;

结构不能声明虚函数,类可以。

3、结构的默认值

结构实例的默认值不会是null。结构通常都有一个隐式的无参构造函数,该构造函数将所有的值类型设置为它们的默认值,同时将所有的引用类型设置为null。但是在没有明确地对字段进行赋值前对实例的字段进行调用,编译器会报错。

PS:结构中不允许声明无参数构造函数,并且不允许声明析构函数。

4、关键字this的含义

在类的实例构造函数和实例成员方法中,this为值类型,所以不可能在类的实例成员中对this进行赋值。在结构的实例构造函数和实例构造成员中,this相当于一个变量,所以可以对该成员函数调用所涉及的整个结构进行修改。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值