Курьёз от Липперта
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 16.12.16 17:30
Оценка: 55 (1)
http://www.dotnetcurry.com/csharp/1292/eric-lippert-interview

public class A<T> {
  public class B : A<int> {
    public void M() { System.Console.WriteLine(typeof(T)); }
    public class C : B { }
  }
}
public class P {
  public static void Main() { (new A<string>.B.C()).M(); }
}


public class A[T] {
    public class B : A[int] {
        public M() : void { System.Console.WriteLine(typeof(T)) }
        public class C : B {}
    }
}
A.[string].B.C().M()

Удивился, что C# и Nemerle дают разные ответы.
Ce n'est que pour vous dire ce que je vous dis.
Отредактировано 16.12.2016 17:31 Don Reba . Предыдущая версия .
Re: Курьёз от Липперта
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.12.16 01:24
Оценка: 22 (2)
Здравствуйте, Don Reba, Вы писали:

DR>Удивился, что C# и Nemerle дают разные ответы.


Разница видна в декомпиляторе. Немерловая версия выглядит так:
public class B : A<int>
{
  public class C : A<T>.B // аргумент "T"
  {
  }

  public void M()
  {
    Console.WriteLine(typeof(T));
  }
}


Шарповская, так:

public class B : A<int>
{
  public class C : A<int>.B // аргумент "int"
  {
  }

  public void M()
  {
    Console.WriteLine(typeof(T));
  }
}
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Курьёз от Липперта
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.12.16 01:30
Оценка: 8 (1) +3
Здравствуйте, Don Reba, Вы писали:

DR>Удивился, что C# и Nemerle дают разные ответы.


А вообще ошибкой было вводить в Дотнет саму идею замыкания на параметры типов внешних типов.

В дизайне Дона Сайма этого не было и параметры типов нужно было задавать явно. У него метод B.M() просто не смог бы обратиться к параметру T, так как он объявлен не в этом классе. А если нужно было бы это сделать, то параметр классу B надо было бы передать явно.

Мне кажется это более чистый и простой дизайн.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 20.12.2016 21:28 VladD2 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.