代码之家  ›  专栏  ›  技术社区  ›  Razor

.NET加载项开发

  •  1
  • Razor  · 技术社区  · 16 年前

    我正在编写一个程序,允许开发人员为它编写外接程序,我希望开发人员能够钩住程序中发生的事件。

    我的代码没有编译,因为我不能在imyprogram接口中声明委托。

    所以我认为这更像是一个设计问题。如何将接口传递给外接程序,以便外接程序能够钩住程序事件?

    [AddInContract]
        public interface IMyProgramAddInContract : IContract {
    
            /// <summary>
            /// Initializes AddIn
            /// </summary>
            void Init(IMyProgram instance);
    
            System.Drawing.Image AddInIcon { get; }
    
            String DisplayName { get; }
    
            String Description { get; }
        }
    
        [AddInContract]
        public interface IMyProgram : IContract {
    
            public delegate EventHandler EmailEventHandler(object sender, EmailEventArgs args);
    
            public event EmailEventHandler BeforeCheck;
            public event EmailEventHandler AfterCheck;
            public event EmailEventHandler EmailDownloaded;
            public event EmailEventHandler OnProcessMessage;
    
        }
    
        [AddInBase]
        public class EmailEventArgs : EventArgs {
    
            public override string ToString() {
                return "todo";
            }
        }
    
    3 回复  |  直到 16 年前
        1
  •  3
  •   Gunny    16 年前

    如果要为外接程序实现事件模型,则应使用委托 而不是 接口-从msdn中查看这个Blurb,看看它是否清除了任何东西:

    When to Use Delegates Instead of Interfaces (C# Programming Guide)

        2
  •  3
  •   Razor    16 年前

    问题已经解决了。

    我不知道委托可以在命名空间级别声明而不在类中。

        3
  •  1
  •   Gutzofter    16 年前

    imyprogram正在声明代理和事件的公共范围。删除它们,我认为您将能够编译