“T @this”在委托声明中的含义是什么?

时间:2011-04-04 09:11:59

标签: c# generics

我刚刚使用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 senderEventArgs args参数声明委托类型,那么T @this部分实现了什么?显然,它声明WeakEventHandler的{​​{1}}泛型类型,但之前我从未见过T(谷歌搜索它是可以理解的绝望)。

2 个答案:

答案 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>的第一个开放泛型类型。