关于是否强类型事件参数有很多讨论。这个问题与此无关。我有以下课程(仅包含相关代码):
public abstract class Thread<TSender, TEventArgs>:
System.IDisposable
where TSender: Thread<TSender, TEventArgs>, new()
where TEventArgs: System.EventArgs, new()
{
public delegate void ThreadEventHandler (Thread<TSender, TEventArgs> sender, ThreadEventArgs e);
// This declaratino generates a VS 2012 warning.
public delegate void ThreadProcessIterationEventHandler<TSender, TEventArgs> (TSender sender, TEventArgs e);
}
第二个委托的声明会生成 VS2012 警告:
1. Type parameter 'TSender' has the same name as the type parameter from outer type 'Thread<TSender,TEventArgs>'
2. Type parameter 'TEventArgs' has the same name as the type parameter from outer type 'Thread<TSender,TEventArgs>'
这种结构在逻辑上似乎是正确的,因为其目的是为派生类提供包装的线程机制。它当然是合法的代码,可以按预期编译和运行。
我会认为有一个自我指向约束可能被认为是不好的做法,但为什么被TSender
标记TEventArgs
为警告?这和声明不一样NestedClass<TSender, TEventArgs>
吗?
我应该注意些什么吗?
更新:第二个委托的目的是允许子类触发强类型事件。