结构
一个类中的若干成员可以组合成结构体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
{
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();
}
}
}
继承是面向对象程序设计的一个重要特征,它允许在现有类的基础上创建新类,新类从现有类中继承类成员,而且可以重新定义或加进新的成员,从而形成类的层次或等级。一般称被继承的类为基类或父类,而继承后产生的类为派生类或子类。
与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
{
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)
评论