c # — смысл устаревшего

Я взял на себя проект с большим количеством унаследованного кода, как C ++, так и C #, который в настоящее время компилируется под VS 2010 (в Windows 7).

Когда я создавал свое решение, удивительно, 143 проекта построены успешно. Однако на лодке было множество предупреждений. Удивительное количество из них предупреждало об устаревших функциях.

warning CS0618: 'System.Runtime.InteropServices.UCOMIMoniker' is obsolete
warning CS0618: 'System.Runtime.InteropServices.UCOMIEnumMoniker' is obsolete
warning CS0618: 'System.Runtime.InteropServices.UCOMIRunningObjectTable' is obsolete
warning CS0618: 'System.Runtime.InteropServices.UCOMIRunningObjectTable' is obsolete
warning CS0618: 'System.Runtime.InteropServices.UCOMIBindCtx' is obsolete
warning CS0618: 'System.IO.Path.InvalidPathChars' is obsolete
warning CS0618: 'System.Configuration.ConfigurationSettings.AppSettings' is obsolete
warning CS0618: 'System.Net.Dns.GetHostByName(string)' is obsolete

Что подразумевается под этим? Функции явно определены, иначе они не будут компилироваться или приведут к некоторой ошибке «не найден» или «не определен». Реализации отсутствуют? Работают ли эти функции (как и раньше)?

Несколько я посмотрел, и они давно устарели. Например, GetHostByName:

.NET Framework

Supported in: 1.1
Obsolete (compiler warning) in 4.6
Obsolete (compiler warning) in 4.6
Obsolete (compiler warning) in 4.5
Obsolete (compiler warning) in 4.5.1
Obsolete (compiler warning) in 4.5.2
Obsolete (compiler warning) in 4
Obsolete (compiler warning) in 3.5
Obsolete (compiler warning) in 3.5 SP1
Obsolete (compiler warning) in 3.0
Obsolete (compiler warning) in 3.0 SP1
Obsolete (compiler warning) in 3.0 SP2
Obsolete (compiler warning) in 2.0
Obsolete (compiler warning) in 2.0 SP1
Obsolete (compiler warning) in 2.0 SP2

Если я правильно понимаю, это устарело за последние 8-9 лет (.NET 2.0 вышел в 2006 году). Почему никто не исправил это? Они должны быть исправлены? Когда я исследовал этот метод GetHostByName, его заменили на GetHostEntry. Это достаточно просто … но подождите, многие люди жалуются, что с новой функцией она работает не так, и, возможно, вам следует заменить ее вызовом GetHostAddresses. Ну черт.

Учитывая, что в моем решении более 28 тыс. Файлов, я не уверен, что смогу просто пошутить над чем угодно. Есть ли способ узнать, как долго будут поддерживаться устаревшие функции? Стоит ли ожидать, что они будут работать после установки системы? Каковы системные последствия того, что код вызывает устаревшие интерфейсы (MSDN)?

Я не пытаюсь понять, как удалить устаревший код из моей собственной системы, но как системы должны работать с устаревшими интерфейсами во внешних системах (например, MSDN). Они явно не следуют простому циклу пометки устаревших, замены и удаления старых интерфейсов. Какова их политика? Как пользователи интерфейсов, определенных в MSDN, реагируют на устаревший тег, особенно если устаревший код не заменяется эквивалентной функцией «яблоки к яблокам».

4

Решение

Часто классы или методы помечаются как устаревшие, так как они будут устаревшими в следующем выпуске или больше не являются наиболее эффективным способом выполнения определенной задачи. Однако Microsoft часто оставляет эти методы надолго, чтобы гарантировать обратную совместимость.

8

Другие решения

В программировании термин «OBSOLETE» означает, что сборка / ресурс / функция / тип является устаревшей или устаревшей, в переводе это означает, что компилятор замечает, что существует лучший или более новый способ сделать это. Пример: функция PHP mysql_query ().

2

Я бы согласился со всеми приведенными выше ответами. В довершение всего я хочу сказать, что, когда компилятор жалуется на устаревший метод, это сигнал тревоги, чтобы пойти дальше и заменить его альтернативным подходом, представленным в SDK. Если вы не планируете обновлять свой проект до более новой .NET Framework, тогда вы можете жить с этим предупреждением на всю жизнь.

0
По вопросам рекламы [email protected]