你注意到了吗?同样是登录,普通会员和高级会员的登录是不同的,普通会员的登录就是提示普通会员登录,高级会员提示是高级会员登录(这是我杜撰的,实际上这个论坛的登录是一视同仁的,不要误会)。遇到这种情况,我们可以在基类中设计一个虚函数,用关键字virtual声明虚函数。
[C#] 纯文本查看 复制代码 class Sufei
{
//变量成员
public string name;
private int age;
public int Age
{
get
{
return age;
}
set
{
if (value <= 0)
age = 0;
else
age = value;
}
}
private int count = 0; //用来记录积分
//函数:登陆
public virtual void Hello()
{
Console.Write("嗨,我是{0},我今年{1}岁了。", name,age);
Console.WriteLine("欢迎你登录");
}
}
再在派生类函数中用关键字overide重写基类的虚函数。
[C#] 纯文本查看 复制代码 class SufeiSenior:Sufei //苏菲基类派生出高级会员
{
//私有成员
private int moneyValue = 0;//高级会员有钱
private int powerValue = 0;//有钱任性
//重写虚函数
public override void Hello()
{
Console.Write("嗨,我是{0},我今年{1}岁了。", name, Age);
Console.WriteLine("欢迎您,尊贵的高级会员");
}
//构造函数
public SufeiSenior()
{
moneyValue++;
Console.WriteLine("我的会员金钱为:{0}",moneyValue );
powerValue++;
Console.WriteLine("我的会员等级为:{0}",powerValue);
}
//属性:moneyValue
public int MoneyValue
{
get
{
return moneyValue;
}
set
{
if (value <= 0)
moneyValue = 0;
else
moneyValue = value;
}
}
//属性:powerValue
public int PowerValue
{
get
{
return powerValue;
}
set
{
if (value <= 0)
powerValue = 0;
else
powerValue = value;
}
}
}
}
这样,我们有了两个Hello()函数,当对象属于普通会员时,程序会自动调用基类的Hello()函数,当对象属于高级会员时,程序会自动调用派生类的Hello()函数,这样,就显示出普通会员与高级会员登录的不同了。
主程序中代码如下:
[C#] 纯文本查看 复制代码 class Program
{
static void Main(string[] args)
{//申明普通会员对象xiaomao
Sufei xiaomao = new Sufei();
xiaomao.Age = 26;
xiaomao.name = "xiaomao";
//申明高级会员对象wwwconsumer
SufeiSenior wwwconsumer = new SufeiSenior();
//访问派生类数据成员
wwwconsumer.Age = 40;
wwwconsumer.name = "wwwconsumer";
//对象xiaomao引用基类中的函数Hello()
xiaomao.Hello();
//派生类的对象引用派生类中的函数Hello()
wwwconsumer.Hello();
}
运行结果如下:
虚函数的调用
看到了,xiaomao登录时调用的是基类函数,wwwconsumer登录时调用的派生类函数。 |