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;
原文地址:https://www.cnblogs.com/fanyong/p/2768929.html