zoukankan      html  css  js  c++  java
  • 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类派生的类,在声明委托类型时,只需要指定委托指向的原型的类型,它不能有返回值,也不能带有输出类型的参数

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

        

         

                

     

     

     

  • 相关阅读:
    join命令
    参与者模式
    字符串中的第一个唯一字符
    Git与SVN对比
    惰性模式
    .NET Conf 2020
    使用Github部署Azure应用服务
    Azure Terraform(一)入门简介
    打日志还能打出个线上Bug_ 太难了。。。
    让API并行调用变得如丝般顺滑的绝招
  • 原文地址:https://www.cnblogs.com/ljknlb/p/7806320.html
Copyright ? 2011-2022 开发猿


http://www.vxiaotou.com