是不是我理解错了,其实 event 是不能重写的?大家不要笑我 :~(

解决方案 »

  1.   

    不是要override event嘛!
    protected override event XXX Init;//如果base class中Init是virtual的话。但override event的内部机制没那么简单,最好不要这样做。
      

  2.   

    可是如果查BETA2的MSDN文档,用override做索引,可以看到他有关于override event的帮助哦,还给出了一个例子,只是没有更加详细的说明而已为什么最好不要override event呢?
    还请赐教
      

  3.   

    感谢您使用微软产品。首先要分清楚event和event处理函数的区别,例如MSDN中提到的OnPaint函数是event处理函数,您可以通过override该函数来增加对该Event的处理代码,甚至可以不调用base类的OnPaint函数来屏蔽掉父类的处理代码,您的日历绘制函数应该就是这个需求。如果一个外部类想要侦听Paint事件,就需要通过event注册相应的delegate函数来实现。因此event是一个类的内部成员变量,不能够被override的。======================
    - 微软全球技术中心 VC技术支持本贴子仅供CSDN的用户作为参考信息使用。其内容不具备任何法律保障。您需要考虑到并承担使用此信息可能带来的风险。具体事项可参见使用条款(<http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp>)。
    为了为您创建更好的讨论环境,请参加我们的用户满意度调查(<http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782)>)。
    ======================
      

  4.   

    哦,原来是这样。
    但是还不如太清晰的概念,那么是不是说我无法重新写 Calendar:Control 的 init 来增加该构件的功能? 如果需要,应该重新写哪一个函数呢?你真是MS的人吗?
    Beta1和Beta2怎么相差那么大,好多BETA1里支持的东西BETA2都没有了,如果你们在遵循COM的原则开发,为什么不是一旦公开发行的接口就保持不变?
    现在BETA2里支持的接口在正式RELEASE的版本里是否会保留?我不希望我们都在学习你们的东西结果真正出来的时候却很大部分要重新来过。
     
    Thanks!
      

  5.   

    打错字了,SORRY,我是说还是有点不太清晰的概念。  ^^
      

  6.   

    在.NET中和event最相近的不是普通field,而是property。property可以override吗?可以!所以event可以override吗?也可以!不信编译下面的代码:public delegate void Foo();
    public class A {
        public virtual event Foo foo;
    }public class B : A {
        public override event Foo foo;
    }
    ...
    但问题是override一个event的行为牵扯到event的实现细节,如果不了解这些细节,其结果决不是你所期望的。等你得到一个exception的时候,就知道我再说什么了。P.S. 至于接口不变,至少也要到release版出来以后吧?据我所知M$在产品的兼容性方面应该是做的最好的软件公司之一了。把WinForm改成Windows.Form就那么麻烦?将就以下嘛!