非常奇怪,子窗体能够访问父类的私有方法

u011042984 2017-12-13 02:24:25
非常奇怪,子窗体能够访问父类的私有方法!不知哪位大侠知道为什么?

代码如下
第一步:建立一个子窗体类Form2
class Form2:Form1
{
}
第二步:在父类Form1中添加一个button1和一个test方法

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void test(){

}

private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.test();

}
}

button1_Click方法中,f2是Form2类的对象,但是竟然能使用Form1的私有方法test。也就是f2.test(), 请问大侠如何解释这一个现象?
...全文
169 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
圣殿骑士18 2017-12-13
  • 打赏
  • 举报
回复
你还真能折腾。这也说明微软dev工具考虑很周到。 解释是容易解释的,因为你虽然是fm2.test(),但因为你没有对test进行override,所以实际上fm2.test()运行的代码,隐含的就是base.test()。而base就是form1。
u011042984 2017-12-13
  • 打赏
  • 举报
回复
回复4楼:我这里用于查询页面,查询页面和原来主页面差不多,但有所区别,所以用了继承
  • 打赏
  • 举报
回复
你是在form1里面操作,form1是知道这个私有方法的……
u011042984 2017-12-13
  • 打赏
  • 举报
回复
回复2楼: 我这里测试一切正常(vs2010)
大鱼> 2017-12-13
  • 打赏
  • 举报
回复
我不知道你这样做是为了什么,实际有这样的用的么?
xuzuning 2017-12-13
  • 打赏
  • 举报
回复
不知道你是怎么运行的,经测试,虽然无编译错误,但一运行就崩溃(vs2010)
闭包客 2017-12-13
  • 打赏
  • 举报
回复
C# 的私有方法,你可以理解为是“类型”私有的,而不是实例私有的。 在你的例子中,test 方法是在类型 Form1 中定义的,自然可以在 Form1 里面使用。
正怒月神 2017-12-13
  • 打赏
  • 举报
回复
我测试了一下,的确如此。 后来我创建了Form3:Form 继承自Form 然后在form3中实例化 f2.发现就调用不了test方法了。 那其实也就说明,在form1中实例化一个继承自form1的form2,只要在其form1的作用域内,是可以调用私有方法的。

110,538

社区成员

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

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

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