正文

C#Doorstep2面向对象程序设计篇42008-04-03 16:31:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/xman/33898.html

分享到:

结构 一个类中的若干成员可以组合成结构体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)

阅读(3365) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册