none
以下代码是什么意思?新手提问,谢谢! RRS feed

  • 问题

  •     protected override void OnClick(EventArgs e) 
        { 
            base.OnClick (e);//这句是回调么?base是指向哪儿了? 
            Form frm = (Form)Activator.CreateInstance(mFrm);//这句这样写是什么含义? 
            frm.MdiParent = mParent; 
            frm.Show(); 
        } 



    大家强烈要求我加入签名
    2009年2月9日 3:18

答案

  • 不是回调
    你的这个代码应该来自一个继承自某一个control   的类
    mybase  表示他的父类  如果是button 就运行 button.onclick   如果是form 就先运行form.onclick
    然后再调用自己定义的若干操作
    Guitar Hero IV -- Singing Rock & Roll.
    • 已标记为答案 a1806 2009年2月11日 2:35
    2009年2月9日 3:55
  • 你好!
         我用注释解释一下,希望对你有帮助:
        protected override void OnClick(EventArgs e) 
        { 
            base.OnClick (e);//调用基类的OnClick方法,基类中的OnClick方法可能会进行一些基础的工作,所以通常在重写的时候调用基类的方法来避免一些基础性工作没有做而导致的异常
            Form frm = (Form)Activator.CreateInstance(mFrm);//通过反射机制获得指定类型的实例
            frm.MdiParent = mParent; 
            frm.Show(); 
        } 

     
    周雪峰
    • 已标记为答案 a1806 2009年2月11日 2:35
    2009年2月9日 4:08
    版主
  • 你理解的很对,这个base.OnClick代表的是基类的相应方法。 
    周雪峰
    • 已标记为答案 a1806 2009年2月11日 2:35
    2009年2月9日 4:15
    版主
  • 我写了一个例子,楼主可以参考一下。也可以创建一个控制台应用程序然后把代码贴进去运行看看。

    1 public class BaseClass  
    2 {  
    3     public virtual void PrintMessage()  
    4     {  
    5         Console.WriteLine("这是来自BaseClass的信息");  
    6     }  
    7 }  
    8  
    9 public class SubClass : BaseClass  
    10 {  
    11     public override void PrintMessage()  
    12     {  
    13         base.PrintMessage();  
    14         Console.WriteLine("这是来自SubClass的信息");  
    15     }  
    16 }  
    17  
    18 class Program  
    19 {  
    20     static void Main(string[] args)  
    21     {  
    22         SubClass sc = new SubClass();  
    23         sc.PrintMessage();  
    24     }  
    25  
    26

    输出结果是:
    这是来自BaseClass的信息
    这是来自SubClass的信息


    理解的越多,需要记忆的就越少
    • 已编辑 RickyLinModerator 2009年2月9日 12:50 增加输出结果
    • 已标记为答案 a1806 2009年2月11日 2:35
    2009年2月9日 12:48
    版主

全部回复

  • 不是回调
    你的这个代码应该来自一个继承自某一个control   的类
    mybase  表示他的父类  如果是button 就运行 button.onclick   如果是form 就先运行form.onclick
    然后再调用自己定义的若干操作
    Guitar Hero IV -- Singing Rock & Roll.
    • 已标记为答案 a1806 2009年2月11日 2:35
    2009年2月9日 3:55
  • 你的类从哪个类继承?


    http://feiyun0112.cnblogs.com/
    2009年2月9日 3:55
    版主
  •  Form frm = (Form)Activator.CreateInstance(mFrm);//这句这样写是什么含义? 

     

    通过指定的类型,创建实例


    http://feiyun0112.cnblogs.com/
    2009年2月9日 3:57
    版主
  • 这个需要知道mFrm的定义

    简单的说 是依照mfrm 这个类型  建立一个新对象  并且把它强制转化为Form  保存在frm 引用中


    Guitar Hero IV -- Singing Rock & Roll.
    2009年2月9日 4:03
  • 原版的:

            private class MenuForm : MenuItem 
            { 
                private Type mFrm; 
                private Form mParent; 
                public MenuForm(Form parent, Type frm, string description):base("Add Form " + description) 
                { 
                    mParent = parent; 
                    mFrm = frm; 
                } 
     
                protected override void OnClick(EventArgs e) 
                { 
                    base.OnClick (e); 
                    Form frm = (Form)Activator.CreateInstance(mFrm); 
                    frm.MdiParent = mParent; 
                    frm.Show(); 
                } 
     
            } 


    大家强烈要求我加入签名
    2009年2月9日 4:04
  • 你好!
         我用注释解释一下,希望对你有帮助:
        protected override void OnClick(EventArgs e) 
        { 
            base.OnClick (e);//调用基类的OnClick方法,基类中的OnClick方法可能会进行一些基础的工作,所以通常在重写的时候调用基类的方法来避免一些基础性工作没有做而导致的异常
            Form frm = (Form)Activator.CreateInstance(mFrm);//通过反射机制获得指定类型的实例
            frm.MdiParent = mParent; 
            frm.Show(); 
        } 

     
    周雪峰
    • 已标记为答案 a1806 2009年2月11日 2:35
    2009年2月9日 4:08
    版主
  • base.OnClick (e);//调用基类的OnClick方法,基类中的OnClick方法可能会进行一些基础的工作,所以通常在重写的时候调用基类的方法来避免一些基础性工作没有做而导致的异常

    此时: base.onclick 应该 不等于: this.onclick吧?

    也就是说,base.Onclick 调用的是 基类里的 ,不是此时重定义的OnClick?



    大家强烈要求我加入签名
    2009年2月9日 4:11
  • 你理解的很对,这个base.OnClick代表的是基类的相应方法。 
    周雪峰
    • 已标记为答案 a1806 2009年2月11日 2:35
    2009年2月9日 4:15
    版主
  • 哦,我原来理解以为进入死循环了。。。
    大家强烈要求我加入签名
    2009年2月9日 4:17
  • 我写了一个例子,楼主可以参考一下。也可以创建一个控制台应用程序然后把代码贴进去运行看看。

    1 public class BaseClass  
    2 {  
    3     public virtual void PrintMessage()  
    4     {  
    5         Console.WriteLine("这是来自BaseClass的信息");  
    6     }  
    7 }  
    8  
    9 public class SubClass : BaseClass  
    10 {  
    11     public override void PrintMessage()  
    12     {  
    13         base.PrintMessage();  
    14         Console.WriteLine("这是来自SubClass的信息");  
    15     }  
    16 }  
    17  
    18 class Program  
    19 {  
    20     static void Main(string[] args)  
    21     {  
    22         SubClass sc = new SubClass();  
    23         sc.PrintMessage();  
    24     }  
    25  
    26

    输出结果是:
    这是来自BaseClass的信息
    这是来自SubClass的信息


    理解的越多,需要记忆的就越少
    • 已编辑 RickyLinModerator 2009年2月9日 12:50 增加输出结果
    • 已标记为答案 a1806 2009年2月11日 2:35
    2009年2月9日 12:48
    版主
  • RickyLin 说:

    我写了一个例子,楼主可以参考一下。也可以创建一个控制台应用程序然后把代码贴进去运行看看。

    1 public class BaseClass  
    2 {  
    3     public virtual void PrintMessage()  
    4     {  
    5         Console.WriteLine("这是来自BaseClass的信息");  
    6     }  
    7 }  
    8  
    9 public class SubClass : BaseClass  
    10 {  
    11     public override void PrintMessage()  
    12     {  
    13         base.PrintMessage();  
    14         Console.WriteLine("这是来自SubClass的信息");  
    15     }  
    16 }  
    17  
    18 class Program  
    19 {  
    20     static void Main(string[] args)  
    21     {  
    22         SubClass sc = new SubClass();  
    23         sc.PrintMessage();  
    24     }  
    25  
    26

    输出结果是:
    这是来自BaseClass的信息
    这是来自SubClass的信息


    理解的越多,需要记忆的就越少

    这例子确实很容易理解。谢谢!


    大家强烈要求我加入签名
    • 已建议为答案 tssing 2009年2月11日 5:24
    • 取消建议作为答案 RickyLinModerator 2009年2月11日 13:08
    2009年2月11日 2:37
  • a1806正确
    • 已建议为答案 tssing 2009年2月11日 5:24
    2009年2月11日 5:24