.net引用类型都有哪些

.net引用类型都有哪些

一、C#中的引用类型有哪些呢?

    C#中有两种类型:引用类型和值类型。引用类型的变量存储对其数据(对象)的引用,而值裤敬类型的变量直接包含其旁毁数据。
    C#中的引用类型包括:类、接口、委托、数组和字符胡启慎串。

二、C#值类型和引用类型的区别

    如果你学过C/C++的话,这点很容易理解,C#中的一个重要特征就是所有一切资源都可以抽象为类,并可实例化对象,包括基本数据类型,所有一切类的基类是Object,因此C#是完全面向对象的语言。
    在C/C++中,“int,byte,long,bool,char..."这些类型虽然不是真正意义上的类,但是从某种角度看,其实也具有类的某些特征,比如你可以把int看做编译器内置的一个类,当你inta进行定义斗返耐变量时,等于用int类创建了一个称作a的对象,只是C#告诉你,int就是个类,它有自己的方法和属性,比如ToString(),而且所有的类型都继承于Object类,空春而C/C++中没有这么彻底。
    C/C++中,你可以直接用基本变量类型创建一个变量,变量名指代一个系统分配的地址,当使用变量名操作时可以直接操作数据,因此这种类型可以叫做值类型,只不过由于C/C++中根本没把基本类型表示为类所以也没有值类型这种表述,直接定义变量时,变量被分配在栈上,叫做静态分配。而当我们在定义一个指针变量时,比如100个元素的动态数组:int*p=newint[100],或者动态分配一个变量并初始化:int*p=newint(10),都是在程序运行时分配到堆上面的,并且把地址赋值给指针p。
    说这些C/C++的概念是想告诉你,C#中的值类型和引用类型就是和C/C++静态分配和动态分配是一样的。C#中的值类型,它可以定义后直接使用(不需要new,没有指针),分配在栈上;引用类型其实就是将指针和所指内存块以及其他额外数据封装了,因为在C#中全面对象化,对用户不可见。但是本质还是一样的,因此值类型(inta=10)就是直接进行分配内存后存储,而引用类型必世辩须进行装箱:objecto=10,装箱的过程就是在堆上分配一个内存块,存放a的值以及其他额外数据并返回地址,也就是对象的引用赋值给o,而你是不可以直接将o按指针来操作的(所以称为引用)。由于基本类型是内置的,所以这类对象的创建不需要显式去new,当然你一定要自己new也不会错objecto=newint(),因为C#是完全面向对象的,一切的实体都可以new,创建格式标准化的(除了接口,因为它没有实体)。
    最后说说值类型,由于C#一切都是面向对象的,因此就算是值类型也是个类,因此基本类型升级后C/C++中很简单变量升级为结构,以满足面向对象统一接口,因为C/C++中类的本质就是结构的升级版(增加了函数),而C#中的值类型的存在为了效率,所以采用静态结构体。虽然这两种语言是完全不同的语言,但是血缘上还是有关系的,有些地方可以互通和借鉴,这个可以帮助我们方便的理解和学习。
    下图为VS2010C#中右键查int类型的定义,注意是struct,值类型,结构的特点就是静态和效率,所以C#中基本类型都是结构:
    下图为VS2010C#中右键查object类型的定义,注意是class,其特点就是动态和灵活,所以C#中引用类型都是类:
   

三、C#值类型和引用类型的区别

    (1)值类型:数据存储在内存的堆栈中察明,从堆栈中可以快速地访问这些数据,因此,值类型表示实际的数据。
    (2)引用类型:对象、数组、函数。
    1、值类型:包括:sbyte、short、int、long、float、double、decimal(以上值类型有符号)byte、ushort、uint、ulong(以上值类型无符号)bool、char
    2、引用类型:包括:对象类型、动态类型、字符串类型。二、具体区别:
    1、值类型:byteb1=1;byteb2=b1;Console.WriteLine("{0},{1}。",b1,b2);b2=
    2;Console.WriteLine("{0},{1}。",b1,b2);Console.ReadKey();解释:byteb1=1;声明b1时,在栈信闷内开辟一个内存空间保存b1的值1。byteb2=b1;声明b2时,在栈内开辟一个滑没弯内存空间保存b1赋给b2的值1。Console.WriteLine("{0},{1}。",b1,b2);输出结果为1,1。b2=2;将b2在栈中保存的值1改为
    2。Console.WriteLine("{0},{1}。",b1,b2);输出结果为1,2。
    2、引用类型:复制代码。

四、新手求教:VB.net中有没有引用型的变量

    当然有啊,
    引用类型的变量就是类的实例化对象
    VB.net值类型包括14种基本数据灶早销类型(除String)、结构隐游和枚举,其他都是引用类型
    引用一个按钮对象
    Dim a As Button = Button1 '假设窗体中有Button1这个按钮控件引用一个自定义类的对象
    Public Class Class1
    End Class
    Dim b 睁睁As New Class1上面的a和b都是引用型的变量。
    字符串也是引用型的变量
    它是基础数据类型中唯一的引用型数据类型。
    Dim s As String = "字符串也是引用类型!"满意请采纳,谢谢。

五、C#值类型和引用类型的区别

    如果你学过C/C++的话,这点很容易理解,C#中的一个重要特征就是所有一切资源都可以抽象为类,并可实例化对象,包括基本数据类型,所有一切类的基类是Object,因此C#是完全面向对象的语言。
    在C/C++中,“int,byte,long,bool,char..."这些类型虽然不是真正意义上的类,但是从某种角度看,其实也具有类的某些特征,比如你可以把int看做编译器内置的一个类,当你inta进行定义斗返耐变量时,等于用int类创建了一个称作a的对象,只是C#告诉你,int就是个类,它有自己的方法和属性,比如ToString(),而且所有的类型都继承于Object类,空春而C/C++中没有这么彻底。
    C/C++中,你可以直接用基本变量类型创建一个变量,变量名指代一个系统分配的地址,当使用变量名操作时可以直接操作数据,因此这种类型可以叫做值类型,只不过由于C/C++中根本没把基本类型表示为类所以也没有值类型这种表述,直接定义变量时,变量被分配在栈上,叫做静态分配。而当我们在定义一个指针变量时,比如100个元素的动态数组:int*p=newint[100],或者动态分配一个变量并初始化:int*p=newint(10),都是在程序运行时分配到堆上面的,并且把地址赋值给指针p。
    说这些C/C++的概念是想告诉你,C#中的值类型和引用类型就是和C/C++静态分配和动态分配是一样的。C#中的值类型,它可以定义后直接使用(不需要new,没有指针),分配在栈上;引用类型其实就是将指针和所指内存块以及其他额外数据封装了,因为在C#中全面对象化,对用户不可见。但是本质还是一样的,因此值类型(inta=10)就是直接进行分配内存后存储,而引用类型必世辩须进行装箱:objecto=10,装箱的过程就是在堆上分配一个内存块,存放a的值以及其他额外数据并返回地址,也就是对象的引用赋值给o,而你是不可以直接将o按指针来操作的(所以称为引用)。由于基本类型是内置的,所以这类对象的创建不需要显式去new,当然你一定要自己new也不会错objecto=newint(),因为C#是完全面向对象的,一切的实体都可以new,创建格式标准化的(除了接口,因为它没有实体)。
    最后说说值类型,由于C#一切都是面向对象的,因此就算是值类型也是个类,因此基本类型升级后C/C++中很简单变量升级为结构,以满足面向对象统一接口,因为C/C++中类的本质就是结构的升级版(增加了函数),而C#中的值类型的存在为了效率,所以采用静态结构体。虽然这两种语言是完全不同的语言,但是血缘上还是有关系的,有些地方可以互通和借鉴,这个可以帮助我们方便的理解和学习。
    下图为VS2010C#中右键查int类型的定义,注意是struct,值类型,结构的特点就是静态和效率,所以C#中基本类型都是结构:
    下图为VS2010C#中右键查object类型的定义,注意是class,其特点就是动态和灵活,所以C#中引用类型都是类:
   

版权声明:本站内容由互联网用户投稿自发贡献或转载于互联网,文章观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至2024tuiguang@gmail.com举报,一经查实,本站将立刻删除。

合作:2024tuiguang@gmail.com