Sin*_*atr 3 c# events weakeventmanager
我有以下例外
WindowsBase.dll 中发生类型为“System.ArgumentException”的未处理异常
附加信息:在“ConsoleApplication.ITest”类型上找不到“事件”事件。
在这个再现中:
using System.Windows; // add reference to WindowsBase
interface IBase
{
event EventHandler Event;
}
interface ITest : IBase { }
class Test : ITest
{
public event EventHandler Event;
}
class Program
{
static void Main(string[] args)
{
var test = new Test();
WeakEventManager<IBase, EventArgs>.AddHandler(test, "Event", (s, e) => { }); // works
WeakEventManager<ITest, EventArgs>.AddHandler(test, "Event", (s, e) => { }); // exception
}
}
Run Code Online (Sandbox Code Playgroud)
为什么找不到通过接口事件继承?此方法抛出异常。
我已经尝试了关于你的例子的各种组合。这是这里唯一的工作代码。似乎您需要知道事件在继承层次结构中的具体定义位置。
using System.Reflection;
using MS.Internal.WindowsBase;
namespace EventTest
{
class Program
{
static void Main(string[] args)
{
var test = new Test();
WeakEventManager<IBase, EventArgs>.AddHandler(test, "IBaseEvent", (s, e) => { }); // works
WeakEventManager<ITest, EventArgs>.AddHandler(test, "ITestEvent", (s, e) => { }); // works
WeakEventManager<Test, EventArgs>.AddHandler(test, "TestEvent", (s, e) => { }); // works
}
}
interface IBase
{
event EventHandler IBaseEvent;
}
interface ITest : IBase { event EventHandler ITestEvent; }
class Test : ITest
{
public event EventHandler IBaseEvent;
public event EventHandler ITestEvent;
public event EventHandler TestEvent;
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止的整体组合;
WeakEventManager<IBase, EventArgs>.AddHandler(test, "IBaseEvent", (s, e) => { }); // works
WeakEventManager<IBase, EventArgs>.AddHandler(test, "ITestEvent", (s, e) => { }); // exception
WeakEventManager<IBase, EventArgs>.AddHandler(test, "TestEvent", (s, e) => { }); // exception
WeakEventManager<ITest, EventArgs>.AddHandler(test, "IBaseEvent", (s, e) => { }); // exception
WeakEventManager<ITest, EventArgs>.AddHandler(test, "ITestEvent", (s, e) => { }); // works
WeakEventManager<ITest, EventArgs>.AddHandler(test, "TestEvent", (s, e) => { }); // exception
WeakEventManager<Test, EventArgs>.AddHandler(test, "IBaseEvent", (s, e) => { }); // exception
WeakEventManager<Test, EventArgs>.AddHandler(test, "ITestEvent", (s, e) => { }); // exception
WeakEventManager<Test, EventArgs>.AddHandler(test, "TestEvent", (s, e) => { }); // works
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6786 次 |
| 最近记录: |