Устаревший атрибут только проверяется во время компиляции?

Интересно, что устаревший атрибут проверяется только во времени выполнения?

Думайте, что у Вас есть два блока. Блок использование метод от блока B. После этого мы отмечаем метод в блоке B как устаревший, который вызывает ошибку времени компиляции при компиляции блока A.

Никакая проблема до сих пор, но вопрос не состоит в том, продолжает ли более старый блок A работать с новым блоком B или нет?Спасибо

11
задан mkus 28 May 2010 в 12:11
поделиться

2 ответа

Это зависит от того, что вы делаете. Атрибут [Устаревший] - это в первую очередь для использования во время компиляции, но имейте в виду, что некоторые части среды выполнения ведут себя иначе, когда они присутствуют (см. Ниже). Это может вызвать проблемы даже для существующего кода, который не перестраивается, поэтому мы должны сделать вывод, что NO , [Obsolete] не проверяется только во время компиляции.

Например, приведенный ниже код будет писать Foo , но не Bar :

using System;
using System.Xml.Serialization;
public class Data
{
    public int Foo { get; set; }
    [Obsolete] public int Bar {get;set;}

    static void Main()
    {
        var data = new Data { Foo = 1, Bar = 2 };
        new XmlSerializer(data.GetType()).Serialize(Console.Out, data);
    }
}

( XmlSerializer также является средой выполнения, а не частью компилятора)

14
ответ дан 3 December 2019 в 05:56
поделиться

Создание сборки, использующей метод из другой сборки, которая помечена как устаревшая, вызывает предупреждение во время компиляции (если не включено 'display warnings as errors').

Ничто не мешает вам использовать этот метод, пока он остается в сборке со ссылкой. Атрибут Obsolete существует как способ для разработчиков библиотек сообщить людям, которые используют библиотеку, что они должны искать другой метод для достижения того, что им нужно.

Чтобы ответить на ваш вопрос, да, старая сборка A будет продолжать работать с новой сборкой B. (при условии, что версия сборки останется прежней)

.
6
ответ дан 3 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

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