结构 一个类中的若干成员可以组合成结构体struct来处理。 事件 委托等概念请见后面解析。 静态成员与实例成员 C#的类定义中可以包含两种成员:静态成员和非静态成员(也即实例成员)。使用了static修饰符的方法为静态成员,反之则是实例成员。 (1)使用static修饰符声明属于类型本身而不是属于特定对象的静态成员。static修饰符可用于字段、方法、属性、运算符、事件和构造函数,但不能用于索引器、析构函数或类型。 (2)静态成员属于类,在内存中只有一份,不必建立该类的实例,通过类名即可使用;而实例成员属于用该类创建的实例,要通过对象名使用。 (3)非静态方法可以访问类中包括静态方法在内的所有成员,而静态方法只能访问类中的静态成员。 类的方法前加了static关键词,则该方法为静态方法,反之为实例方法。静态方法为类所有,可以通过对象来使用,也可以通过类来使用。但一般提倡通过类名来使用,因为静态方法只要定义了类,不需用建立类的实例就可使用。静态方法只能使用类的静态成员。 实例方法必须通过类的实例来使用。实例方法可以使用类的非静态成员,也可以使用类的静态成员。 using System; namespace Exam2_4 { class Test { public int a; //非静态成员 public static int b; //静态成员 public Test(int m, int n) //构造函数 { a = m; b = n; } public void DMeth() //非静态方法 { a = a + 5; b = b + 5; } public static void SMeth() //静态方法 { //a=a+5;静态方法不能使用非静态成员 b = b + 5; } } class Exam2_4 { public static void Main() { Test t1 = new Test(5, 10); t1.DMeth(); //t1.SMeth();//错误!静态方法只能由类调用 Test.SMeth(); //Console.WriteLine("t1.a={0},t1.b={1}",t1.a,t1.b);//错误!静态成员b属于类不属于对象 Console.WriteLine("t1.a={0},Test.b={1}", t1.a, Test.b);//错误!静态成员b属于类不属于对象 Console.Readkey(); } } } 2.面向对象的基本特征 类的继承 继承是面向对象程序设计的一个重要特征,它允许在现有类的基础上创建新类,新类从现有类中继承类成员,而且可以重新定义或加进新的成员,从而形成类的层次或等级。一般称被继承的类为基类或父类,而继承后产生的类为派生类或子类。 与C++不同的是C#中类不能多重继承,只能单一继承,C#中通过接口(interface)实现多重继承. 派生类的声明格式为:类修饰符 class 派生类类名: 基类类名 { 类体 } 在类的声明中,通过在类名的后面加上冒号和基类名表示继承。 class Employee : Person { private string department; private decimal salary; public Employee(string n, char s, int a, string d, decimal sa) : base(n, s, a) { department = d; salary = sa; } new public void Display() { base.Display(); Console.WriteLine("Department:{0}", department); Console.WriteLine("Salary:{0}", salary); } } class Exam2_8 { public static void Main() { Person p = new Person("李红", '女', 28); Employee e = new Employee("田春妹", '女', 24, "办公室", 2500); Person q = e; //基类变量可以存储派生类对象 p.Display(); e.Display(); q.Display(); //调用的是基类的Display()方法 } } 结果分析: 现在我们来看以上实例中类的实例化: <1>Person p = new Person("李红", '女', 28);此句声明一个基类Person的实例,p.Display()将调用基类Person的成员函数。 <2>Employee e = new Employee("田春妹", '女', 24, "办公室", 2500); 此句声明一个基类Person的派生类Employee的实例,e.Display()将调用派生类Employee的成员函数。 <3>Person q = e;此处用基类Person的派生类Employee的实例来实例化基类Person,则对象q只保留基类特性,q.Display()将调用基类Person的成员函数。 (To be continued)

评论