继承问题

lsfv00011 2009-04-18 05:54:56
类文件:

using System;
using System.Collections.Generic;
using System.Text;

namespace testoo
{
public class student
{
public string name;
public string sex;
public yuanxi myyuanxi;
}

public abstract class yuanxi
{
public string name;
public string baodao(student sd)
{
return sd.name + ",来"+name+"这里报道了!";
}
public virtual string jiaoqian(student sd)
{
return sd.name + "去" + caiwu.name + "交钱";
}
}

public class caiwu
{
public static string name = "财务室";
}

public class wuli : yuanxi
{
public new string name = "物理系";
}

public class hangkong : yuanxi
{
public new string name = "航空系";
public override string jiaoqian(student sd)
{
return sd.name + "去" + name + "交钱";
}
}
}


winform内容:

private void Form1_Load(object sender, EventArgs e)
{
testoo.student me = new student();
me.name = "张学友";
me.myyuanxi = new testoo.hangkong();
MessageBox.Show(me.myyuanxi.jiaoqian(me));
MessageBox.Show(me.myyuanxi.baodao(me));
}


说明 jiaoqian 交钱这个方法,是虚方法,可以被不同的院系覆写
但是 baodao  报道 这个方法对于所以院系来说都是一样的。只是具体的院系的名字不同.所以没有定为可覆写.
现在因为 抽象类 public abstract class yuanxi 是没有名字的。他的名字是在具体的院系中定义的。
现在抽象类 yuanxi的 baodao 这个方法中的name不会被继承它的类的name覆写.

大家运行一下就知道了。
报道这个方法 显示的内容是 "张学友来这里报名了" 没有院系的名字。
现在我想怎么不改动 抽象类的 baodao这个方法(不改为虚函数,不想让他覆写,因为方法都一样。只是一个内部成员变量不一样) 来实现我想要的效果呢?
...全文
84 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsfv00011 2009-04-19
  • 打赏
  • 举报
回复
谢谢上2位.感谢.解决了我的疑惑.
xfzzmzj 2009-04-18
  • 打赏
  • 举报
回复

注意一下new 关键字的用法,这样用不对,new 是用来解决版本了冲突的
把hangkong 类改成如下:
public class hangkong : yuanxi
{
//public new string name = "航空系";
public hangkong()
{
name = "航空系";
}
public override string jiaoqian(student sd)
{
return sd.name + "去" + name + "交钱";
}
}
yafeya 2009-04-18
  • 打赏
  • 举报
回复
因为你的基类是抽象类,因此你的基类的name没有时间初始化,所以一直是null,抽象类一般都是定义一些抽象的行为,具体的数据应该在派生类来定义。
tsp860901 2009-04-18
  • 打赏
  • 举报
回复
sf

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧