zoukankan      html  css  js  c++  java
  • 5、C#基础

    1、C#的值类型

    有几个特点:

    • 存储在栈里 
    • 基于值类型的变量直接包含值(值类型存储实际值)。 将一个值类型变量赋给另一个值类型变量时,将复制包含的值。 这与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。
    • 所有的值类型均隐式派生自 System.ValueType。
    • 与引用类型不同,不能从值类型派生出新的类型。 但与引用类型相同的是,结构也可以实现接口。
    • 与引用类型不同,值类型无法包含 null 值。 但是,可以为 null 的类型 功能允许值类型分配给 null。
    • 每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。

    值类型分为两类: struct( 结构 )、 enum(枚举

    struct( 结构 )分为以下几类:

    • Numeric(数值)类型

      • 整型

      • 浮点型

      • decimal

    • bool

    • 用户定义的结构。

    下表列出了 C# 中内置类型中可用的值类型:

    类型描述范围默认值
    bool 布尔值 True 或 False False
    byte 8 位无符号整数 0 到 255 0
    char 16 位 Unicode 字符 U +0000 到 U +ffff ''
    decimal 128 位精确的十进制值,28-29 有效位数 (-7.9 x 1028 到 7.9 x 1028) / 100 到 28 0.0M
    double 64 位双精度浮点型 (+/-)5.0 x 10-324 到 (+/-)1.7 x 10308 0.0D
    float 32 位单精度浮点型 -3.4 x 1038 到 + 3.4 x 1038 0.0F
    int 32 位有符号整数类型 -2,147,483,648 到 2,147,483,647 0
    long 64 位有符号整数类型 -923,372,036,854,775,808 到 9,223,372,036,854,775,807 0L
    sbyte 8 位有符号整数类型 -128 到 127 0
    short 16 位有符号整数类型 -32,768 到 32,767 0
    uint 32 位无符号整数类型 0 到 4,294,967,295 0
    ulong 64 位无符号整数类型 0 到 18,446,744,073,709,551,615 0
    ushort 16 位无符号整数类型 0 到 65,535 0

    实际上是简单类型,所有的简单类型(C# 语言的组成部分)均为 .NET Framework 系统类型的别名。 例如,int 是 System.Int32 的别名。可使用文字初始化简单类型。 例如,“A”是 char 类型的文字,而 2001 是 int 类型的文字。如需得到一个类型或一个变量在特定平台上的准确尺寸,可以使用 sizeof 方法。表达式 sizeof(type) 产生以字节为单位存储对象或类型的存储尺寸。下面举例获取任何机器上 int 类型的存储尺寸:

     1 namespace DataTypeApplication
     2 {
     3    class Program
     4    {
     5       static void Main(string[] args)
     6       {
     7          Console.WriteLine("Size of int: {0}", sizeof(int));
     8          Console.ReadLine();
     9       }
    10    }
    11 }

    当上面的代码被编译和执行时,它会产生下列结果:

    Size of int: 4

    2、 C# 的 struct

    struct(结构)通常用作一小组相关变量的容器,在 C# 中它使得一个单一变量可以存储各种数据类型的相关数据。struct 关键字用于创建结构体,可以按照如下的方式声明 Person结构:

    1 struct Person
    2 {
    3    public string name;
    4    public int age;
    5    public string sex;
    6 };  

    下面的程序演示了结构的用法:

    using System;

    namespace MyStruct
    {
        struct Person
        {
            public string name;
            public int age;
            public string sex;
        }

        class Program
        {
            static void Main(string[] args)
            {
                Person person1;
                person1.name = "张三";
                person1.age = 18;
                person1.sex = "男";

                Person person2;
                person2.name = "李四";
                person2.age = 20;
                person2.sex = "男";

                //输出 person1 的信息
                Console.WriteLine("person1 姓名:{0}", person1.name);
                Console.WriteLine("person1 性别:{0}", person1.sex);
                Console.WriteLine("person1 年龄:{0}", person1.age);

                //输出 person2 的信息
                Console.WriteLine("person2 姓名:{0}", person2.name);
                Console.WriteLine("person2 性别:{0}", person2.sex);
                Console.WriteLine("person2 年龄:{0}", person2.age);

                Console.Read();
            }
        }
    }

    当上面的代码被编译和执行时,它会产生下列结果:

    person1 姓名:张三
    person1 性别:男
    person1 年龄:18
    person2 姓名:李四
    person3 性别:男
    person4 年龄:20

    结构与类具有许多相同的语法,但结构比类受到的限制更多:

    • 结构可带有方法、字段、索引、属性、运算符方法和事件。
    • 结构不能声明默认构造函数(没有参数的构造函数)或终结器。
    • 结构可以声明具有参数的构造函数。
    • 一个结构无法继承自另一个结构或类,并且它不能为类的基类。
    • 结构可实现一个或多个接口。
    • 结构成员不能指定为 abstract、virtual 或 protected。
    • 与类不同,无需使用 new 运算符即可对结构进行实例化。
    • 如果不使用 New 操作符,只有在所有的字段都被初始化之后,字段才被赋值,对象才被使用。

    多提一下:可将结构类型强制转换为接口类型,这将导致“装箱”操作,以将结构包装在托管堆上的引用类型对象内。 当将值类型传递到接受 Object 作为输入参数的方法时,将发生装箱操作。详细的会在后面装箱和取消装箱说明。

    C# 的 enum 

    枚举类型(也称为枚举)为定义一组可以赋给变量的命名整数常量提供了一种有效的方法。 例如,假设您必须定义一个变量,该变量的值表示一周中的一天。 该变量只能存储七个有意义的值。 若要定义这些值,可以使用枚举类型。枚举类型是使用 enum 关键字声明的:

    enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };
    enum Months : byte { Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec }; 

    默认情况下,枚举中每个元素的基础类型是 int。 可以使用冒号指定另一种整数值类型,如前面的示例所示。准许使用的类型有 byte、sbyte、short、ushort、int、uint、long 或 ulong。

    通常情况下,最好是在命名空间内直接定义枚举,以便该命名空间中的所有类都能够同样方便地访问它。 但是,还可以将枚举嵌套在类或结构中。
    默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1。 例如,下面的枚举,Sat 是 0,Sun 是 1,Mon 是 2 等。

    enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};

    如下面的示例所示枚举数可用初始值来重写默认值。

    enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

     在此枚举中,强制元素序列从 1 而不是 0 开始。 但是,一般建议这样使用。注,枚举数的名称中不能包含空白。

    如果变量 meetingDay 的类型为 Days,则只能将 Days 定义的某个值赋给它(无需显式强制转换)。 如果会议日期更改,可以将 Days 中的新值赋给 meetingDay:

    Days meetingDay = Days.Monday;
    //...
    meetingDay = Days.Friday;

     可以将任意整数值赋给 meetingDay。 例如,代码行 meetingDay = (Days) 42 不会产生错误。 但也不应该这样做,因为默认约定的是枚举变量只容纳枚举定义的值之一。 将任意值赋给枚举类型的变量很有可能会导致错误。
     
    下面的实例演示了枚举变量的用法:

    using System;
    
    namespace MyEnum
    {
        class Program
        {
            enum Days { Sun, Mon, tue, Wed, thu, Fri, Sat };
            static void Main(string[] args)
            {
                int WeekdayStart = (int)Days.Mon;
                int WeekdayEnd = (int)Days.Fri;
                Console.WriteLine("Monday: {0}", WeekdayStart);
                Console.WriteLine("Friday: {0}", WeekdayEnd);
                
                Console.Read();
            }
        }
    }

    当上面的代码被编译和执行时,它会产生下列结果:

    Monday: 1
    Friday: 5

    项目源码下载:https://pan.baidu.com/s/1miOPAdU


    C#基础,目录

    上一篇:4、C#基础 - C# 的 常见概念简述

    下一篇:

  • 相关阅读:
    全排列 next_permutation()函数
    hdu1247
    hdu3518
    pku2774 求最长公共子串
    hdu3460 Ancient Printer
    pku2001
    pku 3261
    NOI.AC#2007light【根号分治】
    CF1370F2The Hidden Pair(Hard Version)【交互题,二分】
    P3335[ZJOI2013]蚂蚁寻路【dp】
  • 原文地址:https://www.cnblogs.com/mrbug/p/8030341.html
Copyright © 2011-2022 走看看