zoukankan      html  css  js  c++  java
  • C#值类型和引用类型

     

    今天又开始复习一点点了,值类型和引用类型。
    这两种类型存储在内存的不同地方:值类型存储在堆栈中,而引用类型存储在托管堆上。
    注意区分某个类型是值类型还是引用类型,因为这种存储位置的不同会有不同的影响。
    例如:int是值类型,这表示下面的语句会在内存的两个地方存储值20:
    i = 20;
    j = i;
    但考虑下面的代码,这段代码假定已经定义了一个类Vector,Vector是一个引用类型,它有一个int类型的

    成员变量Value:
    Vector x,y
    x = new Vector();
    x.Value = 30;
    y = x;
    Console.WriteLine(y.Value);
    y.Value = 50;
    Console.WriteLine(x.Value);
    执行这段代码,只有一个Vector对象,x和y都指向包念该对象的内存位置。
    因为X和Y是引用类型的变量,声明这两个变量只是保留了一个引用一一而不会实例化给定类型的对象。要

    创建对象就必须使用new关键字。

    如果变量是一个引用,就可以把其值设置为null,表示它不引用任何对象:
    y = null;
    如果将引用设置为null,显然就不可能对它调用任何非静万言书的成员函数或字段,这么做会在运行时抛

    出一个异常。
    在C#中基本数据娄型如bool和long都是值类型。。如果声明一个bool变量,并给它赋予另一个bool变量的

    值,在内存中就会有两个bool值,如果以后修改第一个bool值,第二个bool变量的值也不会改变。这些类

    型是通过值来复制的。

    相反,大多数更复杂的C#数据类型,包括我们自己声明的类都是引用类型。它们分配在堆中,其生存期可以跨多个函数调用,可以通过一个或几个别名来访问。

    CTS类型:
    例如,要把int i 转换为string,可以编写下面的代码:
    string s = i.Tostring();
    应强调的是,在这种便利语法的背后,类型实际上仍存储为基本类型。基本类型在概念上用.net结构表示,所以肯定没有性能损失。

    下面看看C#中定义的类型,我们将列出每个类型,以及它们的定义和对应.net类型(CTS类型)的名称。C#有15个预定义类型,其中13个是值类型,2个是引用类型(string和object).

    预定义的值类型:
    内置的值类型表示基本数据类型,例如整型和浮点类型、字符类型和bool类型。
    C#支持8个预定义整数类型:

    浮点类型
    C#提供了许多整型数据类型,也支持浮点类型
    decimal类型
    decimal类型表示精度更高的浮点数。
  • 相关阅读:
    收集一些关于前端的网站(持续更新)
    关于表单设计(登录)的几点感悟
    css样式表中的样式覆盖顺序(转)
    UI设计常用网站(随时更新)
    关于ps安装遇到的问题解决(转载整理)
    【工作记录】解决溢出div自适应的高度问题
    Cross origin requests are only supported for protocol schemes: http, data, chrome-extension, https, chrome-extension-resource. 报错处理
    [css]img垂直居中的方法
    iOS学习第三天杂记
    iOS学习第二天杂记--UI
  • 原文地址:https://www.cnblogs.com/goooto/p/1153194.html
Copyright © 2011-2022 走看看