• C#面向对象高级语法(二)


    类的转换

    1. is运算符

    using System;
    classClass1

    {

    }

    class Class2

    {

    }

    class IsTest

    {

    static void Test(Object o)

    {

    Class1 a;

    Class2 b;

    if (o is Class1)

    {

    Console.WriteLine("o is Class1");

    a = (Class1)o;// do something for a

    }

    else if (o is Class2)

    {

    Console.WriteLine("o is Class2");

    b = (Class2)o;// do something for b

    }

    else

    {

    Console.WriteLine("o is neither Class1 nor Class2");

    }

    }

    static void Main(string[] args)

    {

    Class1 c1 = new Class1();

    Class2 c2 = new Class2();

    Test(c1);

    Test(c2);

    Test("a string");

    // output:

    // o is Class1

    // o is Class2

    // o is neither Class1 nor Class2

    }

    }

    1. as运算符

    using System;

    class AsTest

    {

    static void Main(string[] args)

    {

    object[] os = { "a", "b", 1, 2, 3 };

    foreach (object o in os)

    {

    String s = o as string;

    if (s != null)

    {

    Console.WriteLine(s);

    }

    }

    // output:

    // a

    // b

    }

    }

    结构

    枚举和结构是两种高级的值类型。

    结构与类很相似,是一种可以包含数据成员和函数的数据结构。但是与类不同,结构是一种值类型,为结构分配数据时不需要从托管堆中分配内存,从栈中分配。结构类型的变量直接包含了改结构的数据,而类类型的变量所包含的只是对象的一个引用。

    1. 结构

    在C#中用关键字struct来声明结构,声明形式如下:

    [特性]

    [结构修饰符] struct 结构名:[基接口列表]

    {

        [结构体]

    }[;]

    其中,特性是对结构特性的描述,是可选的。结构修饰符也是可选的,可以使用的修饰符与类修饰符完全相同。关键字struct和结构名是必需的。结构可以实现一个或多个接口,也是可选的;结构体(定义结构的代码块)是必需的,结构体的代码包括在一对大括号之间,结构体也可以为空。最后还可以添加一个分号,也是可选的。

        结构都是从System.ValueType继承而来的,因此结构中都包含从类型System.ValueType继承而来的成员。与类一样,结构中可以包括数据成员(常量和字段)和函数成员(构造函数、属性、方法、索引器、接口、委托和事件)。

    Demo.cs

    using System;

    using System.Collections.Generic;

    struct Student

    {

    private int math;

    public int Math

    {

    get { return math; }

    set { math = value; }

    }

    public int Chinese;

    public int English;

    // student's name

    private string name;

    public string Name

    {

    get { return name; }

    set { name = value; }

    }

    //constructor

    public Student(int math, int chinese, int english, string name)

    {

    this.math = math;

    this.Chinese = chinese;

    this.English = english;

    this.name = name;

    }

    public double Average()

    {

    int sum = this.math + this.Chinese + this.English;

    return sum / 3.0;

    }

    }

    class StudentStructTest

    {

    static void Main(string[] args)

    {

    Student tom = new Student(80, 90, 85, "Tom");

    double average = tom.Average();

    Console.WriteLine("Average grade is {0}", average);

    }

    }

    枚举

    枚举类型(Enum Type)是一种特殊的值类型,用于声明一组命名的常量。使用枚举类型增加了程序的可读性和可维护性。这与使用常量来代替文本或数字的意思是相似的,另外,枚举是强类型的,可以避免类型错误。

    枚举使用关键字enum来声明,形式如下:

    [枚举修饰符] enum 枚举名

    {

        [枚举成员名]=[常量表达式]

    }[;]

    例如:

    enum Week

    {

    Monday,

    Tuesday,

    Wednesday,

    Thursday,

    Friday,

    Saturday,

    Sunday

    }

    枚举类型可以显式地声明byte、sbyte、short、ushort、int、uint、long、ulong类型作为对应的基础类型,默认的枚举声明意味着对应的基础类型是int

    • 如果枚举成员是在枚举类型中声明的第一个枚举成员,则它的值为0
    • 否则,美剧成员的关联值是通过将前一个枚举成员的值加1得到的。这样增加后的值必须在该基础类型的可表示范围内,否则会出现编译时错误。

    例如:

    enum Values

    {

    value1,

    value2,

    value3 = 30,

    value4

    }

    其中,value1=0,value2=0,value3=30,value4=31。

    把枚举转化成对应的基础类型需要做类型转换:

    • int a = (int)Week.Friday;
  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    mac flutter 创建过程及遇到的问题
    MAC 终端编辑完成后如何保存:
    mac下添加环境变量
    beanstalkd队列
    小程序真机上报错 for developer: some selectors are not allowed in component wxss , including tag name selectors, id selectors, and attribute selectors
    小程序通过web-view实现与h5页面之间的交互
    小程序中的web-view与h5网页之间的交互
  • 原文地址:https://www.cnblogs.com/fanyong/p/2768929.html
Copyright © 2020-2023  润新知