Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么是;T@this";在代表声明中是什么意思?_C#_Generics - Fatal编程技术网

C# 什么是;T@this";在代表声明中是什么意思?

C# 什么是;T@this";在代表声明中是什么意思?,c#,generics,C#,Generics,我刚刚使用添加了一个弱事件实现到一个项目中。虽然我盲目地使用我在网上找到的代码™ 这通常是一个坏主意,它是一个比我以前一起破解的好得多的实现。到目前为止,它似乎工作得很好,但为了理解代码,我遇到了以下问题: public class WeakEventHandler<T, E> : IWeakEventHandler<E> where T : class where E : EventArgs { private delegate void Op

我刚刚使用添加了一个弱事件实现到一个项目中。虽然我盲目地使用我在网上找到的代码™ 这通常是一个坏主意,它是一个比我以前一起破解的好得多的实现。到目前为止,它似乎工作得很好,但为了理解代码,我遇到了以下问题:

public class WeakEventHandler<T, E> : IWeakEventHandler<E>
    where T : class
    where E : EventArgs
{
    private delegate void OpenEventHandler(T @this, object sender, E e);
    ...
public类WeakEventHandler:IWeakEventHandler
T:在哪里上课
其中E:EventArgs
{
私有委托void OpenEventHandler(T@this,对象发送者,E);
...

我习惯于只使用
对象发送者
事件args args
参数来声明委托类型,那么
T@this
部分实现了什么呢?显然,它声明了
弱于thandler的
T
泛型,但我以前从未见过
@this
(谷歌搜索是不可能的)。

这个
@this
意味着你可以使用关键字
this
作为变量


T
只是
WeakEventHandler
的第一个打开的泛型类型,@符号允许您在代码中转义标识符

见MSDN-

本节中给出的标识符规则与Unicode标准附录15建议的规则完全一致,除了允许下划线作为初始字符(在C编程语言中是传统的)、标识符中允许Unicode转义序列以及“@”允许使用字符作为前缀,以便将关键字用作标识符

他们给出了一个逃跑的可爱例子:

class @class
{
   public static void @static(bool @bool) {
      if (@bool)
         System.Console.WriteLine("true");
      else
         System.Console.WriteLine("false");
   }   
}

希望在代码复查中看到它!

所以它只允许您使用保留字作为变量名?是的,就像@event、@class或@object。只是一点警告,它也是文本字符串指示符,因此您可以编写@“debug\Myfolder”如果它不认为反斜杠是转义字符。@Carlos-不是在变量名前面,它不是。是的,它确实是上下文的,在字符串之前有不同的含义。@Oded。是的,我想提供其他用法以防止混淆。不知道我是否做到了……也请看这里,谢谢@Stuart,是的,它看起来像是要避免的东西!it mak当您在其他语言(如VB.Net)中使用代码时,“this”在该语言中并不特殊。Intellisense会将其显示为“this”