Почему сгенерированный код переопределения для универсального метода неверен? - PullRequest
2 голосов
/ 17 августа 2010

У меня есть абстрактный обобщенный класс

public abstract class Foo<TType>

с абстрактным методом

public abstract object DoSomething(TType arg = default(TType)) {}

Теперь унаследованный класс

public class BabyFoo : Foo<string>

когда я хочу переопределить DoSomething и начать набирать «override», чтобы заставить intellisense / generator написать скелет метода, который я ожидал

public override object DoSomething(string arg = default(string))

или даже

public override object DoSomething(string arg = null)

но буквально приходит

public override object DoSomething(string arg = default(TType))

Вначале я думал, что это ошибка VS2010, поскольку необязательные параметры являются новыми для c #, но кто-нибудь может сказать мне, если есть реальная причина, по которой (ссылочные типы против типов значений ??) IDE генерирует этот код? *

1 Ответ

4 голосов
/ 17 августа 2010

Просто чтобы уточнить:

public abstract class Foo<TType>
{
    public abstract object DoSomething(TType arg = default(TType));
}

public class BabyFoo : Foo<string>
{
    // Expected:
    public override object DoSomething(string arg = default(string))
    // Actual:
    public override object DoSomething(string arg = default(TType));
}

Если я что-то упускаю, то это просто ошибка в IDE / code-gen Visual Studio. Изменение сигнатуры метода на «ожидаемую» приводит к скомпилированному коду, так как «фактическая» отказывается компилироваться из-за того, что явно недействительна.

Попробовав несколько различных типов для TType, а также такие вещи, как ограничение where TType : new(), я не смог заставить VS сгенерировать правильный код с помощью вашего метода DoSomething.

Поздравляем - вы (возможно) нашли ошибку в Visual Studio =)

Всегда есть крайние случаи, когда дело доходит до генерации кода, я зарегистрировал один для Visual Basic 2005/2008 , который давно был решен, как WONT FIX, поскольку это был действительно затемнить один сравнительно. Надеюсь, этот будет исправлен!

...