请问为什么控件的事件响应函数不能是private 而可以是protected的啊?
请高手讲详细点哈!
请高手讲详细点哈!
解决方案 »
- 哈哈 如何造假IP来源于哪一个页面?
- ReportViewer 9.0 和 ReportViewer 10.0 传递参数方式有区别吗?各位牛人来看看这是为什么!!标题一定要长!!!!
- JavaScript如何获取fckeditor上传的内容中的img的地址?
- 调用存储过程更新数据库内容出问题,请各位帮忙看一眼
- 关于asp.net站点性能的一点疑问
- 补充上面的问题
- 我不明白:dreamweavemx2004和Microsoft Visual Studio .NET 2003。凡请各大高手指教
- 关于窗口赋值的问题!
- 简单 Forms 身份验证问题
- 水晶报表是MVS.NET自代的CRYSTALREPORTVIEWER吗?
- |zyciis| 一个类的重载 大家帮我看一下要怎么写
- 高手请看这两个DataSet如何合并
private:私有的
protected:在子类中可见如果一个控件的事件使用了protected,那么,当别的类继承了这个控件时,子类仍然可以使用父类的事件好像是这样
...
...
</asp:MultiView>cs页面protected void MultiView1_ActiveViewChanged(object sender, EventArgs e)
加上补充:
aspx要继承cs页面类
只是在VS2005的WEB Site编程模型下有一个特殊的机制用于动态生成委托
所以方法必须是Protected及其以上的访问级别
而如果我们手动添加委托的话,方法可以是 private,代码如下Page_Load() {
this.button1.OnClick += new System.EventHandler(button1_Click)
}private void button1_Click(Object sender, EventArgs e) {
// 代码完全没有问题
}
还有一个就是在html中可用Js调该方法
能帮我解答一下为什么我那种不能使用private吗?
当然,但只能保证实现逻辑的正确,不保证微软就是这样做的。
首先,aspx页面也是需要编译的,它会编译成它的后台CS类的一个子类
在编译的过程中
如果碰到runat="server"这样的标签,编译器就会检查事件的定义,之后加入委托(在VS2003中,这一步都是通过设计器创建实实在在的代码来完成,而在VS2005中,隐藏了这一步的实现)
例如,在 a.aspx 页面
编译器发现下面的代码 <asp:Button id="button1" runat="server" onclick="button1_Click" />
那么编译后的代码应该为public class ___a : a { ...
base.button1.OnClick += new System.EventHandler(base.button1_Click); // 因为 button1_Click(object, EventArgs)方法并不是声明在 ___a 中,
// 而是在它的父类当中,所以,要保证 button1_Click 的正常调用,需要 button1_Click 的访问级别至少为 Protected
...
}a.aspx.cs 代码如下
public class a {
protected void button1_Click(object sender, EventArgs e) {
// 该方法的访问级别至少需要 Protected,以保证 ___a 可以对它的调用
}
}