C#数据类型

  根据在内存中存储位置的不同,C#的数据类型分为两种

  1.值类型:该类型的数据长度固定,存放于堆栈(stack)上。

   2.引用类型:该类型的数据长度可变,存放于堆(Heap)上。

  一. C#的值类型

       类   别                             说   明  
       简单类型 有有符号整型,无符号整型,Unicode字符型,实数型,布尔型
       枚举类型 enum E{...}形式的用户定义类型
       结构类型 struct S{...}形式的用户定义类型
       可控类型 具有null值的值类型扩展,如int? 表示可为null的int类型

 下面介绍每种值类型的特点

  1.简单类型

     简单类型是C#预置的数据类型,具有如下特性:首先,他们都是 .NET系统类型的别名;其次,由简单类型组成的常量表达式仅在编译时而不是运行时受检测;最后,简单类型可以直接被初始化。

  (1)整数类型

         数学上的整数可以从负无穷到正无穷,但是计算机的存储单位是有限的,所以计算机语言提供的整数类型的值总是一定范围之内的。C#有八种数据类型:短字节型(sbyte),字节型(byte),短整型(stort),无符号短整型(ustort),整型(int),无符号整型(unit),长整型(long),无符号长整型(ulong)。

  (2)字符类型

         除了数字,计算机处理的信息还包括字符。字符主要包括数字字符,英文字符,表达式字符等,C#提供的字符类按照国际上公认的标准,采用Unicode字符集。字符型书数据占用两个字节的内存,可以用来存储Unicode字符集当中的一个字符(注意,只是一个字符,不是一个字符串)。

  (3)实数类型

        C#有三种实数类型:float(单精度型),doudle(双精度型),decimal(十进制小数型)。

  (4)布尔类型

         布尔类型是用来表示“真”和“假”两个概念的,在C#里用true和false来表示。

   2. 枚举类型

       枚举(enum)实际上是为一组在逻辑上密不可分的整数值提供便于记忆的符号。

       例如:定义颜色的枚举,一年四季的枚举

   3.结构类型

       利用简单数据类型,可以进行一些常规数据运算,文字处理。但是在日常生活中,经常会碰到一些更复杂的数据类型,比如学生学籍记录中可以包含学生姓名,年龄,籍贯,科家庭住址等信息。如果要用简单类型来管理的话,每一条记录都要放到三个不同的变量当中,工作量大,还不够直观。

      所以C#就定义了一种数据类型,它将一系列相关的变量组织为一个实体,该类型称为结构(struct),每个变量成为结构的成员。

   4.可空类型

         可空(Nullable)类型也是值类型,只是它是包含null的值类型。简而言之,可控类型可以表示所有基础类型的值加上null。因此声明一个可空的布尔类型变量(System.Boolean),就可以从集合{true,false,null}中进行赋值。

        为了定义一个可空的变量类型,在底层数据类型中添加问号(?)最为后缀。在C#中,System.Nullable<T>类型提供了一组所有可空类型都可以使用的成员,?后缀记法实际上是创建一个泛型System.Nullable<T>结构类型实例的简写。一非空变量一样,局部可控变量必须赋一个初始值。

       例如:    int ? nullableInt =1;

                     double ? nullableDouble = 5.67;

        这样的语法只对值类型是合法的。如果视图创建一个可空引用类型(包括字符串),就会遇到编译时错误。

         例如:   string ? s = "string";

    二. C#引用类型

    

       类   别                           说   明  
        类类型
Object,string,自定义类型
       接口类型
Interface I {...}形式的用户定义类型
       数组类型
一维和多维数组
       委托类型
Delegate int D {...}形式的用户定义类型

  下面介绍每种值类型的特点

   1. 类类型

       类是面向对象编程的基本单位,是对一组同类对象的抽象描述。类是一种包含数据成员,函数成员,和嵌套类型的数据结构。类的数据成员包括常量,域和事件,函数成员包括方法,属性,索引指示器,运算器,构造函数和析构函数。

      类和结构都包含了自己的成员,但他们之间最主要的区别在于:类是引用类型,而结构是值类型。另外类支持继承机制而结构不支持。通过继承,派生类可以扩展基类的数据成员和函数方法,进而达到代码的重用和设计重用的目的。因此类一般用于定义复杂实体,结构主要用于定义小型数据结构。

   (1)Obiect类型

             在C#的统一系统中,所有类型(预定义类型,用户定义类型,引用类型和值类型)都是直接或间接从类System.Object继承的。

             由于Object类型是所有其他类型的基类,可以将任何类型的赋给Object类型的变量。

    (2)String类型

            C#定义了一个基本的类string,专门用于对字符串的操作。.NET对string类型变量提供了独特的管理方式,与别的引用类型不同,不需要使用new关键字就能声明string类型的变量,因此string类型被看成是一个“独特”的引用类型

    (3)用户自定义类型

            C#程序员除了使用.NET Framework类库中系统自定义类以外,还可以使用class关键字自定义类型。

     2.接口类型

     C#不支持类的多重继承(指一个1子类可以有一个以上的直接父类,该子类可以继承他直接的父类成员),但是客观世界出现多重继承的情况又比较多。为了避免传统的多重继承给程序带来的复杂性等问题,C#提出了接口的概 念,通过接口可以实现多重继承的功能。

       接口在语法上和抽象类(Abstract Class)相似,它定义了若干个抽象方法,属性,索引,事件,形成一个抽象成员的集合,每个成员通常反应事物吗某方面的功能。

       程序中接口的用处主要体现在下面几个方面:

                    * 通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。

                    * 通过接口可以指明多个类需要实现的方法。

                    * 通过接口可以了解对象的交互界面,而不需要了解对象所对应的类。

      定义接口使用interface关键字,在接口中可以有0至多个成员。一个接口必须是抽象的方法,属性,事件或索引,这些抽象成员都没有实现体,并且所有接口成员隐含的都是公共访问性。

      一个接口不能包含常数,域,操作符,构造函数,静态构造函数或嵌套类型,也不能包括任何类型的静态成员。接口本身可以带修饰符,如public,internal,但是接口成员声明中不能使用除new外的任何修饰符。

      按照编码惯例,接口的名字都以大写字母I开始。

      接口把方法的定义和对它的实现区分开来,一个类可以实现多个接口来达到类似于“多重继承”的目的。接口的继承关系用冒号(:)表示,如果有多个基接口,则用逗号分开。

     3.数组类型

       数组(Array)是一种常用的引用数据类型,从字面上理解数组的概念,可以解释为“一组数”,“一组元素”,数组中的元素是通过下标索引来进行访问或修改。不同的下标表示数组中不同的元素,配合  数组的名字就可以访问数组中的所有元素。

      数组的下表是从零开始的,数组的长度定义为数组中包含元素的个数。

      数组中的”秩“也称数组的维数,用来确定和每个数组元素关联的索引个数,数组最多可以有32个维数。“秩”为1的数组成为一维数组。“秩”大于1的数组成为多维数组。

     4.委托类型

       委托是用来处理其他语言(如C++,Pascal和Modula)需要用函数指针来处理的情况的。不过去C++函数指针不同,委托是完全面向对象的和类型安全的。

         委托声明定义一个从System.Delegate类派生的类,在声明委托类型时,只需要指定委托指向的原型的类型,它不能有返回值,也不能带有输出类型的参数

         委托实例封装了一个调用列表,该列表列出了一个或多个方法,每个方法都称为一个可调用体,对于实例方法,可调用实体有该方法和一个相关连的实例组成。对于静态方法,可调用实体仅由一个方法组成。用一个适当的参    数集来调用一个委托实例,就是用此给定的参数集来调用该委托类型实例的每个科调用实体。

    

     

            

 

 

 

原文地址:https://www.cnblogs.com/ljknlb/p/7806320.html