zoukankan      html  css  js  c++  java
  • C#中的变量祥解

    一、C#数据类型:

    C#数据类型的本质是存储方式和可参与逻辑运算方式的抽象。

    A:值类型

    值类型变量可以直接分配一个值,它是从System.ValueType派生而来,值类型直接包含数据,比如int,char,float,他们分别存储整型数据,字符,浮点数,当你申明一个值类型时,系统分别空间来存储值类型的数据,值类型包含以下类别:

    此外,结构体,及枚举类型也都属于值类型。

    B:引用类型

    引用类型不包含存储在变量中的实际数据,但是它们包含对数据的引用,换句话说,它指向内存中的位置,如果内存中的数据是由一个变量改变的,其它变量也会自动反映这种变化,内置的引用类型有object,dynamic,String

    1.object类型

    object类型是C#通用类型系统所有数据类型的终极基类,Object是System.Object类的别名,所以Object类型可以被分配成任何其它类型(值类型、引用类型、预定义类型或用户自定义类型)的值,但是在分配之前需要进行类型转换。当一个值类型转换为引用类型时称为装箱,当一个值类型转换为Object时称为拆箱,拆装箱是非常损耗内存的,会影响程序的执行效率,所以要尽量避免执行拆装箱操作。

      int ii=9;
      object o = ii;
    装箱操作
    object o = 9;
    int ii = (int)o;
    拆箱操作

    2.dynamic类型

    您可以存储任何类型的数据在动态类型中,这些变量类型检查是在程序运行时发生的。动态类型和对象类型相似,但是对象类型的类型检查是在编译时发生的,而动态类型变量的类型检查是在运行时发生的。

     dynamic type;
     type = "11111";
    dynamic

    3.string类型

    允许您给变量分配任何字符串值,字符串的赋值比较特别,字符串是"不可变的",对字符串的操作实质是返回新的字符串操作,

    string str1 = "A";
    string str2 = "B";
    str1 += str2;
    String

    执行完代码后 str1 = "AB",str1指向了新的内存空间,但是之前的A并没有消失,还占据着内存等着GC对其进行回收。

     假如大量操作字符串会令程序性能下降,所以产生了StringBuider

    StringBuilder sb = new StringBuilder("Hello");
    sb.Append("Word");
    sb.Append("!");
    StringBuilder

    只有在大量进行字符串操作时才能体现出StringBuilder的优势

    4.数组类型

    在 C# 中,数组实际上是对象,数组是一种数据结构,它包含若干相同类型的变量。

    数组具有以下属性:

    • 数组可以是 一维、 多维或 交错的。
    • 数值数组元素的默认值设置为零,而引用元素的默认值设置为 null。
    • 交错数组是数组的数组,因此其元素是引用类型并初始化为 null。
    • 数组的索引从零开始:具有 n 个元素的数组的索引是从 0 到 n-1。
    • 数组元素可以是任何类型,包括数组类型。
    • 数组类型是从抽象基类型 Array 派生的 引用类型。 由于此类型实现了 IEnumerable 和 IEnumerable< T> ,因此可以对 C# 中的所有数组使用foreach 迭代。

    用户自定义类型包括 Class,delegate,interface

     C:指针类型

    C#中的指针类型和C,C++中的一样,都是指向一片内存地址,但是在C#中尽量少用指针类型。

    二、C#中数据类型转换

    数据类型的转换包括显示类型转换和隐式类型转换

    1.隐式类型转换

    隐式类型转换主要发生在C#默认数据转换是安全的情况下,比如int型赋值给double型:

    int i = 3;
    double d = i;

    一般情况下小转大不会发生数据的丢失,所以可以用隐式类型转换.

    2.显示类型转换

    显示类型转换包含两种:

    一种是将字符串转换为想要的数据类型,Parse

    string str = "3";
    i = int.Parse(str);

    这种转换方式有一个弊端,那就是待转换的字符串确实可以转换为int,一旦待转换的字符串不可以转换成为对应的类型,就会报错。为了克服这个弊端,可以用TryParse

    另一种就是万能转换Convert.To

    string str = "3";
    double s = Convert.ToDouble(str);
    Convert.To
  • 相关阅读:
    利用条件信号量设计读写锁
    高效编程之互斥锁和自旋锁的一些知识
    高效编程之指针跳转的影响
    高效编程之cache命中对于程序性能的影响
    SQL Server中使用自定义指定顺序排序
    Vue使用,异步获取日期时间后格式成"/Date(1333245600000+0800)/" 转换成正常格式
    技术胖-胜洪宇关注web前端技术
    百度editor编辑器添加新字体
    mvc4中的 webapi 的使用方式
    js特效不错的网站
  • 原文地址:https://www.cnblogs.com/Artist007/p/11359713.html
Copyright © 2011-2022 走看看