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

Reb*_*ott 24 c# generics

我刚刚使用Dustin Campbell的WeakEvent类为项目添加了一个弱事件实现.虽然盲目使用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);
    ...
Run Code Online (Sandbox Code Playgroud)

我习惯只使用object senderEventArgs args参数声明委托类型,那么该T @this部分实现了什么?显然,这是宣布的东西 WeakEventHandlerT泛型类型,但我从来没有见过@this之前(和谷歌搜索这是可以理解的绝望).

Stu*_*art 31

@符号允许您在代码中转义标识符.

见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");
   }   
}
Run Code Online (Sandbox Code Playgroud)

想在代码审查中看到一个!

  • 谢谢@Stuart,是的,它看起来像是要避免的东西! (5认同)

Ode*_*ded 29

@this意味着您可以将关键字this用作变量.

T只是第一个开放的泛型类型WeakEventHandler<T, E>.

  • 是的,就像@event,@ class或@object一样. (2认同)
  • 只是一点警告,它也是文字字符串指示符,所以例如你可以编写@"debug\Myfolder",而不用认为反斜杠是一个转义字符. (2认同)
  • @奥德。是的,我的意思是提供其他用法以防止混淆。不知道我有没有做到... (2认同)