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
  • 相关阅读:
    Codeforces 1255B Fridge Lockers
    Codeforces 1255A Changing Volume
    Codeforces 1255A Changing Volume
    leetcode 112. 路径总和
    leetcode 129. 求根到叶子节点数字之和
    leetcode 404. 左叶子之和
    leetcode 104. 二叉树的最大深度
    leetcode 235. 二叉搜索树的最近公共祖先
    450. Delete Node in a BST
    树的c++实现--建立一棵树
  • 原文地址:https://www.cnblogs.com/Artist007/p/11359713.html
Copyright © 2011-2022 走看看