Это неправильный код в MSDN?

Я нашел следующий код в MSDN ( здесь ), что, по-видимому, неверно (ошибка времени компиляции). Не так ли?

delegate void D(int x);
class C
{
   public static void M1(int i) {...}
   public void M2(int i) {...}
}
class Test
{
   static void Main() { 
      D cd1 = new D(C.M1);      // static method
      Test t = new C();         // <---- WRONG-------
      D cd2 = new D(t.M2);      // instance method
      D cd3 = new D(cd2);      // another delegate
   }
}

Рассмотрим эту строку:

Test t = new C();

Класс C не является производным от класса Test , поэтому это назначение не будет компилироваться. Я что-то здесь упускаю (некоторые предположения, которые я не учел в статье?)

Также следующая строка будет неправильной, даже если класс C был получен из Test:

D cd2 = new D(t.M2);

Разве не так?

7 голосов | спросил Kamran Bigdely 29 Mayam14 2014, 00:38:58

1 ответ


0

Эта строка должна быть

C t = new C();

Вы также можете использовать (в новых версиях C #)

var t = new C();

Единственный способ, которым t.M2 в следующей строке будет действительным, это если t имеет тип C.

ответил Ben Voigt 29 Mayam14 2014, 00:41:23

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132