【C#】值类型和引用类型


    学了这么久的C#了,还是对基本格式不太熟悉,所以博客开始先来介绍一下C#的基本格式。

基本格式

以图为例


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

  这个是引入类库,System是所有.net官方类库的最基本命名空间,所以每个C#开头都会看到这一句。

  namespace _02指引

  这一句是声明命名空间,以便在其他文件中用using指令引入,如果其它源文件需要这个命名空间内的方法,只需要using_02指引即可。

    class Program

  这一句是声明一个类,因为C#是完全面向对象的语言,所以所有的内容都必须放入类里面,这一句是声明一个叫Program的类

      static void Main(string[] args)

  这一句之前一直让人比较困惑,看到括号里面我甚至认为这是声明了一个args的字符串数组,其实不然,这一句是主函数,是文件的入口函数,编译这个源文件后悔直接执行这个函数,和以前学习vb中main函数没声明区别。


值类型和引用类型

  前面我们介绍了C#的基本格式,那么值类型和引用类型是哪一级呢?当然是类啦。不过类与类也是有差别的。

  类的定义格式为  [访问修饰符] class 类名

  类中类型的声明就在不同于class,值类型用class声明,引用类型用struck声明。


值类型和引用类型的区别

  说了这么多,两种类型到底有什么区别。

  1.将一个值类型变量赋给另一个值类型变量时,将复制包含的值。引用类型变量的赋值只赋值对对象的引用,而不复制对象本身。

  2.值类型不能包含null值。

  3.每种值类型均有一个隐式的默认构造函数来初始化该模型的默认值。


  总而言之,值类型的值存在栈上,引用类型栈上存的是地址,值在堆上。


堆和栈的区别

  栈是便一起建就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;局部值类型变量、值类型参数等都在栈内存中。

  堆是程序运行期间动态分配的内存空间,我们可以根据程序的运行情况确定要分配的堆内存的大小。



最后区分一下类中哪些为值类型,哪些为引用类型。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 33
    评论
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值