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

zhq0918 2003-12-12 11:00:29
众所周知,继承是面向对象编程的特点和优点,我做的窗体Form2继承于窗体Form1,在Form1中的Form_Load事件中有代码
MessageBox.Show("你好啊!");我怎么在Form2中将Form1中应用简单的方法把它屏蔽掉啊!在Delphi中很容易处理的!请高手回答!
如果这都不方便的话,很不好的
...全文
30 41 打赏 收藏 举报
写回复
41 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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吗?我能这样改吗?
  • 打赏
  • 举报
回复
加载更多回复
相关推荐
发帖
C#
加入

10.7w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2003-12-12 11:00
社区公告

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