C# 类型和变量

如果有错误之处,忘广大网友评论指正,我会及时修改!

定义

类型:类型定义了C#中数据的结构和行为。定义一个类型包括定义他的成员、基础类型、实现哪些接口,和类型所允许的操作。C#中有两种数据类型,数值类型和引用类型。

(1)数值类型: 数值类型的直接指向数据本身。每一个数值类型的变量每一个都有自己的数据副本,操作一个数值变量不会对其他变量造成影响。

(2)引用类型: 引用类型的数据存储的是数据的引用,又或者叫对象的引用。可以存在两个变量引用同一个对象,操作其中一个引用变量可能会对另一个引用指向的对象造成影响。

变量:变量相当于一个指向特定类型数据的符号。一个变量名就是一个标识,他是一个不带空格的unicode字符序列。如果以变量名以@为前缀,那么它可能是C#的保留关键字。保留关键字对于与其他语言交互很有用处。

数值类型详解

  数值类型可以进一步划分成简单类型、枚举类型、结构体类型、空指针类型和与元组类型。

(1)简单类型

  • 有符号整型: sbyte, short, int, long
  • 无符号整型: byte, ushort, uint, ulong
  • Unicode 字符: char(代表一个utf-16编码单元)
  • IEEE 二进制浮点类型: float, double
  • 高精度十进制浮点类型:decimal
  • 布尔类型: bool(代表Boolean值,只能为true或者false)

(2)枚举类型

        枚举类型是以enum E{...}形式定义的用户定义类型。枚举类型是具有命名常量的独特类型。每一个枚举常量都有一个上述八个整型类型之一隐藏类型。所以一个枚举类型的集合相当于其隐藏类型的集合。

(3)结构体类型

        以struct S {...}形式定义的用户定义类型。

(4)空指针类型

        其值为null的值类型的扩展

(5)元组类型

        以(T1, T2, T3..)定义的用户定义类型

引用类型详解

引用类型可以被分为类、接口、委托类型。

(1)类类型

  • 所有其他类型的最终的基类:object
  • Unicode strings: string, 代表了一个UTF-6编码单元序列,或者说一个char序列
  • 以class C {...}形式定义的用户定义类型

(2) 接口类型

        以interface I {...} 形式定义的用户定义类型

(3)数组类型

        一维数组,多维数组,交错数组:例如int[], int[,], 和int[][]。

提供一个交错数组的例子:

int[][] jagggedArray=

{

   new int[]{1,2,3},

   new int[]{4},

   new int[]{5,6}

}

(4)委托类型(详细了解参考点击进入链接,类似于函数式变成,把函数当成变量使用)

        以delegate int D(...)形式定义类型

概述

todo: 补充关于C#类型的概述

类、结构体、接口、委托类型都支持泛型,因此可以进行参数化设计。

Csharp支持支持任何类型的一维和多维数组。和其他类型不同,数组类型不用在他使用之前被声明。一个类型后面带上方括号就可以完成数组类型声明,例如int[]代表一个一维整型数组,int[,]代表一个二维整形数组,int[][]表示一个一维的一维整形数组的数组,也可以叫交错数组。

可为空的类型不需要单独定义。对于每一个费控类型T,都有一个相关联的可以存放null值的空类型T?。例如int?可以存放任何32位整数或者null值;string?可以存放字符串值和null值。

C#的类型系统是统一的,所以任何类型的值都可以当做object对待。C#中每一个类型都 直接或间接从object类型衍生出来,object是所有类型的最终基类。只要将引用类型的值视为类型对象,就可以将其视为对象。通过执行装箱和拆箱操作,将值类型的值视为对象。在下面的示例中,将int值转换为object,然后再转换回int。

using System;

namespace TypeDemoApplication {

    class TypeDemo {
        public static void Main (string[] args) {
            int i = 1;
            Console.WriteLine("int i  = " + i);
            object o = i; // boxing
            Console.WriteLine("boxing object i  = " + o);
            int j = (int) i; //unboxing
            Console.WriteLine("unboxing int j  = " + j);
        }
    }
}

输出:

当一个值类型的值赋值给对象引用,将会有一个箱子分配出来存储这个值。这个箱子是引用类型的实例,值被复制到了箱子中;相反,当一个对象引用被强转成值类型,首先会检查装箱的值是否是对应的类型,如果是,箱子里面的值会被复制到值类型。

猜你喜欢

转载自blog.csdn.net/weixin_41385146/article/details/131154964