C#中关于继承的问题,请大家踊跃发言啊!!

zhq0918 2003-12-12 11:00:29
众所周知,继承是面向对象编程的特点和优点,我做的窗体Form2继承于窗体Form1,在Form1中的Form_Load事件中有代码
MessageBox.Show("你好啊!");我怎么在Form2中将Form1中应用简单的方法把它屏蔽掉啊!在Delphi中很容易处理的!请高手回答!
如果这都不方便的话,很不好的
...全文
65 41 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnlamar 2003-12-12
  • 打赏
  • 举报
回复
zhq0918() ,顺序反了,修饰符当然得在class前面了。。。是吧?
public abstract class ArrayForm : System.Windows.Forms.Form
cnlamar 2003-12-12
  • 打赏
  • 举报
回复
是啊,如果还要执行基类的PageLoad的话,就在子类方法中加base.调用基类的方法执行就可以了嘛。。。
libwan 2003-12-12
  • 打赏
  • 举报
回复
这样改不行啊:
Form1:
public virtual void Form1_Load(object sender, System.EventArgs e)
{
MessageBox.Show("你好啊");
}
Form2:
public override void HerForm2_Load(object sender, System.EventArgs e)
========================

那是你并不是重载"Form1_load()"方法呀!


{

}
zhq0918 2003-12-12
  • 打赏
  • 举报
回复
public class abstract ArrayForm : System.Windows.Forms.Form
这样写吗?是错误的
cnlamar 2003-12-12
  • 打赏
  • 举报
回复
改了个示例,你看看成不?

abstract class Form1
{

public void PageLoad(object sender, System.EventArgs e)
{
//...
}
}

class Form2 : Form1
{
new void PageLoad()
{
//...
}
}
Coder李海波 2003-12-12
  • 打赏
  • 举报
回复
事件(我是说同一个事件,例如Form Load,或者同一个控件的Click事件)的顺序,先执行父类的事件,再执行子类的事件,好像没有办法改变什么
可以在事件中调用自己写的virtual方法,如在Form1的Load事件中调用formLoad方法
public virtual void formLoad
{
MessageBox.Show("你好啊");
}
如果Form2不想执行这个方法里面的代码,override什么都不干就行了。
public override void formLoad
{
//....
//base.formLoad();
//....
}
polarlm 2003-12-12
  • 打赏
  • 举报
回复
楼上的例子很有代表性的
cnlamar 2003-12-12
  • 打赏
  • 举报
回复
窗体也是类构造的呀?怎么会不行呢?
对了,基类那边的类你加了基类修饰符了吗?
没加的话加上试试?
public abstract class UserBase
zhq0918 2003-12-12
  • 打赏
  • 举报
回复
自定义的类当然可以了,我说的是窗体
yoobj 2003-12-12
  • 打赏
  • 举报
回复
mark
zhq0918 2003-12-12
  • 打赏
  • 举报
回复
不行啊,大家在想办法试一试
jp311 2003-12-12
  • 打赏
  • 举报
回复
class BaseClass
{
public delegate void D(object sender, System.EventArgs e);
public event D E;

public BaseClass()
{
E += new D(F);
}

public virtual void F(object sender, System.EventArgs e)
{
System.Console.WriteLine("BaseClass");
}

public void F1()
{
E(this, new System.EventArgs());
}
}

class DerivedClass : BaseClass
{
public override void F(object sender, System.EventArgs e)
{
System.Console.WriteLine("DerivedClass");
}
}

class AppMain
{
static void Main()
{
DerivedClass obj = new DerivedClass();
obj.F1();
}
}
cnlamar 2003-12-12
  • 打赏
  • 举报
回复
在重写方法前使用new关键字重写父类方法
比如new public bool WebUserLogout()
zhq0918 2003-12-12
  • 打赏
  • 举报
回复
怎么new啊,老兄帮忙试试
polarlm 2003-12-12
  • 打赏
  • 举报
回复
用 new试试
zhq0918 2003-12-12
  • 打赏
  • 举报
回复
我试了,还是不行啊
zhq0918 2003-12-12
  • 打赏
  • 举报
回复
这样改不行啊:
Form1:
public virtual void Form1_Load(object sender, System.EventArgs e)
{
MessageBox.Show("你好啊");
}
Form2:
public override void HerForm2_Load(object sender, System.EventArgs e)
{

}
libwan 2003-12-12
  • 打赏
  • 举报
回复
楼上的,你这个是行不通的!
FileNewExit 2003-12-12
  • 打赏
  • 举报
回复
try:

Form1:

protected override void OnLoad(EventArgs e)
{
MessageBox.Show("Hello");

}

Form2:Form1
protected override void OnLoad(EventArgs e)
{

}
zhq0918 2003-12-12
  • 打赏
  • 举报
回复
我是不是需要把父类Form1里的所有的private 都改成public吗?我能这样改吗?
加载更多回复(21)

111,092

社区成员

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

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

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