Назад совместим дополнительный параметр в C# 4?

Мне любопытно знать это, обратно совместим ли дополнительный параметр, представленный в C#4, или нет?

Позвольте мне разъяснить свой вопрос с простым примером. Предположим, что я пишу следующий код в C#4 на.Net2 в VS2010:

public void Foo(int val1, int val2, int val3 = 5){ .... }

Теперь я скомпилировал код, сделайте dll и сошлитесь на него к C#2 / проект C#3 на.Net2. В редакторе кода (кроме VS2010, скажите VS2008), что я буду видеть в intellisense?

  1. Два перегруженных метода как:

    public void Foo(int val1, int val2)
    public void Foo(int val1, int val2, int val3)
    
  2. Что-то еще как:

    public void Foo(int val1, int val2, int val3)
    public void Foo(int val1, int val2, int val3 = 5) //VS2008 is not supposed to show this
    

Как я, как предполагается, называю метод C#4 в проекте C#2?

9
задан Anindya Chatterjee 14 July 2010 в 02:25
поделиться

2 ответа

Это будет просто один метод - компилятор C# не создает перегрузок. Это будет точно так же, как если бы вы вызывали метод, созданный в VB.NET с необязательными параметрами - они были в .NET с самого начала. Просто компилятор C# 2 не знает, как с ними работать, поэтому вам придется указывать все аргументы самостоятельно.

В основном необязательные параметры изменяют только то, как вызываются методы. Если есть метод типа this:

public void Foo(int x = 10, int y = 20)

и вы вызываете его так:

Foo(15);

компилятор C# 4 изменит вызывающую сторону на:

Foo(15, 20);

Компилятор C# 2 не может этого сделать, поэтому вам придется указать оба аргумента.

10
ответ дан 4 December 2019 в 11:03
поделиться

Вы увидите единственный метод, который имеет все параметры.

Методы с необязательными параметрами в C# 4 и каждой версии VB компилируются как один метод с метаданными CIL, указывающими, какие параметры являются необязательными и каковы их значения по умолчанию.
C# 3 (как компилятор, так и IntelliSense Visual Studio) игнорирует эти метаданные.

Дополнительную информацию см. в здесь.

9
ответ дан 4 December 2019 в 11:03
поделиться
Другие вопросы по тегам:

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