Подтвердить что ты не робот

Что означает "T @this" в декларации делегата?

Я только что добавил слабую реализацию события в проект, используя класс Dustin Campbell WeakEvent. Хотя слепо с использованием кода, который я нашел в Интернете и торговле; как правило, плохая идея, это гораздо лучшая реализация, чем то, что я ранее взломал. Кажется, что это хорошо работает до сих пор, но, чтобы понять код, я натолкнулся на следующее:

public class WeakEventHandler<T, E> : IWeakEventHandler<E>
    where T : class
    where E : EventArgs
{
    private delegate void OpenEventHandler(T @this, object sender, E e);
    ...

Я использую объявление типов делегатов только с аргументами object sender и EventArgs args, так что же делает цель T @this? Очевидно, что он объявляет что-то типа WeakEventHandler T generic, но я никогда не видел @this раньше (и googling это, по понятным причинам, безнадежно).

4b9b3361

Ответ 1

@this означает, что вы можете использовать ключевое слово this в качестве переменной.

T - это просто первый открытый общий тип WeakEventHandler<T, E>.

Ответ 2

Символ @позволяет вам избежать идентификаторов внутри вашего кода.

См. MSDN -

Правила для идентификаторов, приведенные в этом разделе, точно соответствуют правилам, рекомендованным Стандартным Приложением 15 Юникода, за исключением того, что подчеркивание разрешено в качестве начального символа (как это традиционно на языке программирования C), escape-последовательности 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");
   }   
}

Хотелось бы увидеть это в обзоре кода!