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”