Непоследовательная отчетность о устаревших использования членаC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Непоследовательная отчетность о устаревших использования члена

Сообщение Anonymous »

Рассмотрим этот класс: < /p>

Код: Выделить всё

public class Number
{
[System.Obsolete()] public          string ToExactString() => "";
[System.Obsolete()] public override string ToString() => "";
}
< /code>
Теперь рассмотрите этот код: < /p>
Number number = new();
string s1 = number.ToExactString();
string s2 = number.ToString();
< /code>
и теперь, наблюдайте, что происходит: < /p>
[list]
[*] Вызов toExactString () < /code> отображается визуальным Студия с промежуткой, а компилятор генерирует предупреждение CS0612: «Участник» устарел ». em> рендерирован Visual Studio с промежуточным,  [b], но компилятор не генерирует никаких предупреждений. [/b] 
[/list]
В результате: 
не имеет значения, замечает ли мои стареющие глаза пробег на вызов toExactString () 
, потому что компилятор сообщит мне Во время сборки, и я даже могу получить «рассматривать все предупреждения как ошибки», включенные для хорошей меры, поэтому я никогда не буду случайно запускать код, вызывающий устаревший метод. < /p>
Однако, если я не смогу Обратите внимание на промежуток времени при вызове этого toString () , я никогда не узнаю. Разница между двумя методами заключается в том, что toExactString () не является переопределением, в то время как toString () является переопределением метода без абсолюта, но это должно быть совершенно неактуальным и совершенно несущественным в этом сценарии , потому что я храню ссылку на число , а не ссылку на объект .
Не то, что это имеет значение, но чтобы быть ясным, во всем моем c# Проекты, которые у меня есть CS0809: «устаревший член участника переопределяет необсолетный участник» отключен , поскольку это предупреждение совершенно бессмысленно, так как оно совершенно нормально и даже в некоторых случаях очень желательно для Иметь устаревший элемент, который переопределяет не-абсолютного элемента, в зависимости от обстоятельств здесь с ToString () . Дело в том, что я хочу , чтобы создать устаревшее переопределение, которое никто не должен напрямую вызывать, даже если это может быть законно вызвать код, содержащий ссылку на базовый класс. < /p>
Visual Studio отображает все призывы к промежутке, что показывает, что Visual Studio прекрасно понимает, какой метод вызывается в каждом случае, тогда как Рослин притворяется, что не понимает, какой метод является методом вызывается в случае toString () , как будто это является переопределением, так или иначе. .Obsolete ("Сообщение")] Затем предупреждение о вызове toExactString () Изменения в CS0618: «член» устарел: «Сообщение», но абсолютно ничего не изменится.
Вопросы: < /p>
  • Это ошибка в компиляторе C#? < /li>
    Есть ли есть ошибка известное исправление или обходной путь?


Подробнее здесь: https://stackoverflow.com/questions/794 ... ber-usages
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»