我刚刚使用Dustin Campbell's WeakEvent class向项目中添加了一个弱事件实现。虽然盲目地使用Code I Found On The Internet™通常是一个坏主意,但它的实现要比我以前一起攻击的好得多。到目前为止它似乎运行良好,但为了理解代码我遇到了以下内容:
public class WeakEventHandler<T, E> : IWeakEventHandler<E>
where T : class
where E : EventArgs
{
private delegate void OpenEventHandler(T @this, object sender, E e);
...
我习惯用object sender
和EventArgs args
参数声明委托类型,那么T @this
部分实现了什么?显然,它声明WeakEventHandler
的{{1}}泛型类型,但之前我从未见过T
(谷歌搜索它是可以理解的绝望)。
答案 0 :(得分:30)
@符号允许您在代码中转义标识符。
请参阅MSDN -
本节中给出的标识符规则完全符合Unicode标准附件15推荐的规则,但允许下划线作为初始字符(在C编程语言中是传统的),标识符中允许使用Unicode转义序列,允许使用“@”字符作为前缀,以便将关键字用作标识符。
http://msdn.microsoft.com/en-us/library/aa664670(VS.71).aspx
他们给出了逃避的可爱例子:
class @class
{
public static void @static(bool @bool) {
if (@bool)
System.Console.WriteLine("true");
else
System.Console.WriteLine("false");
}
}
希望在代码审核中看到一个!
答案 1 :(得分:29)
@this
表示您可以使用关键字this
作为变量。
T
只是WeakEventHandler<T, E>
的第一个开放泛型类型。