【问题标题】:What does "T @this" mean in a delegate declaration?委托声明中的“T @this”是什么意思?
【发布时间】:2011-04-04 09:11:58
【问题描述】:

我刚刚使用Dustin Campbell's WeakEvent class 在项目中添加了一个弱事件实现。尽管盲目地使用我在 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 部分实现了什么?显然它声明了 WeakEventHandlerT 泛型类型,但我以前从未见过 @this(谷歌搜索它是可以理解的)。

【问题讨论】:

标签: c# generics


【解决方案1】:

@this 表示您可以使用关键字this 作为变量。

T 只是WeakEventHandler&lt;T, E&gt; 的第一个开放泛型类型。

【讨论】:

  • 所以它只是让您使用保留字作为变量名?
  • 是的,就像@event、@class 或@object。
  • 只是一点警告,它也是文字字符串指示符,所以例如你可以写 @"debug\Myfolder" 而不会认为反斜杠是转义字符。
  • @Carlos - 不在变量名前面,不是。是的,它确实是上下文相关的,在字符串之前有不同的含义。
  • @Oded。是的,我的意思是提供其他用法以防止混淆。不知道我是否做到了...
【解决方案2】:

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

参见 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");
   }   
}

希望在代码审查中看到那个!

【讨论】:

  • 谢谢@Stuart,是的,这看起来应该避免!
  • 当您在其他语言(例如 VB.Net)中使用代码时会更有意义。 “this”在那种语言中并不特别。 Intellisense 会将其显示为“this”
猜你喜欢
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
  • 2020-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
  • 1970-01-01
相关资源
最近更新 更多