Уведомить разработчика о методе «НЕ ИСПОЛЬЗОВАТЬ»

Хорошо, я знаю, что вы думаете: «Зачем писать 9X_dotnet метод, который вы не хотите, чтобы люди 9X_.net использовали?» Верно?

Короче говоря, у меня 9X_dotnet есть класс, который нужно сериализовать 9X_attributes в XML. Чтобы XmlSerializer творила чудеса, класс должен 9X_.net-framework иметь пустой конструктор по умолчанию:

public class MyClass { public MyClass() { // required for xml serialization } } 

Итак, мне 9X_attributes нужно иметь его, но я не хочу, чтобы люди 9X_dot-net использовали его, поэтому есть ли какой-либо атрибут, который можно использовать, чтобы пометить метод как «НЕ ИСПОЛЬЗОВАТЬ»?

Я думал об использовании атрибута 9X_attribute Obsolete (поскольку это может остановить сборку), но 9X_attributes это кажется "неправильным", есть 9X_.net-framework ли другой способ сделать это, или мне нужно 9X_dot-net идти вперед и стиснуть зубы? :)

Обновить

Хорошо, я 9X_attribute принял ответ Кита, так как в глубине души 9X_attribute я полностью с ним согласен. Вот почему я 9X_attribute задал вопрос в первую очередь: мне не нравится 9X_attribute идея наличия атрибута Obsolete.

Однако...

есть все еще проблема, пока 9X_dot-net нас уведомляют в intellisense, в идеале 9X_dot-net мы хотели бы сломать сборку, так есть ли 9X_.net способ это сделать? Возможно, создать собственный 9X_attributes атрибут?

Был создан более конкретный вопрос here.

32
0
7
Общее количество ответов: 7

Ответ #1

Ответ на вопрос: Уведомить разработчика о методе «НЕ ИСПОЛЬЗОВАТЬ»

Вы можете использовать:

[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]

, чтобы он не отображался 9X_.net в IntelliSense. Если потребитель все еще 9X_.net хочет использовать его, он может это сделать, но 9X_dotnet его будет не так легко обнаружить.

Тем не 9X_dotnet менее точка зрения Кита о перепроектировании 9X_attributes остается в силе.

26
1

  • Это больше не работает с 2013 года: https ...

Ответ #2

Ответ на вопрос: Уведомить разработчика о методе «НЕ ИСПОЛЬЗОВАТЬ»

Если класс [Serialisable] (т. е. его можно копировать 9X_.net куда угодно по мере необходимости), для 9X_attribute десериализации необходим конструктор без 9X_dotnet параметров.

Я предполагаю, что вы хотите 9X_.net-framework заставить ваш код передавать значения по 9X_dot-net умолчанию для ваших свойств параметризованному 9X_dot-net конструктору.

По сути, вы говорите, что XmlSerializer может 9X_.net-framework сделать копию, а затем установить свойства, но 9X_attributes вы не хотите, чтобы ваш собственный код 9X_.net делал это.

В какой-то степени я думаю, что 9X_dotnet это чрезмерное проектирование.

Просто добавьте 9X_dot-net XML-комментарии, подробно описывающие, какие 9X_attribute свойства нужно инициализировать (и какие).

Не 9X_.net-framework используйте [Obsolete], потому что это не так. Зарезервируйте 9X_attributes это для действительно устаревших методов.

16
0

Ответ #3

Ответ на вопрос: Уведомить разработчика о методе «НЕ ИСПОЛЬЗОВАТЬ»

throw new ISaidDoNotUseException(); 
9X_dot-net
8
1

  • Я разрываюсь между голосованием "против", потому что это сломает ...

Ответ #4

Ответ на вопрос: Уведомить разработчика о методе «НЕ ИСПОЛЬЗОВАТЬ»

Сейчас для таких нужд можно использовать 9X_dotnet анализаторы кода - благодаря компилятору Roslyn в современном 9X_.net-framework .NET.

Либо вы можете написать свой собственный 9X_dot-net анализатор кода. Вот несколько советов для 9X_dot-net начала:

  • https://docs.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/tutorials/how-to-write-csharp-analyzer-code-fix
  • https://andrewlock.net/creating-a-roslyn-analyzer-in-visual-studio-2017/
  • https://www.meziantou.net/writing-a-roslyn-analyzer.htm

Или использовать уже существующие 9X_.net - я выбрал для своих нужд такой способ:

  • BannedApiAnalzyers - это как раз для предупреждения "НЕ ИСПОЛЬЗОВАТЬ"

Вот 9X_attribute еще одна интересная "домашняя страница" для 9X_.net Roslyn Analyzers: Cybermaxs/awesome-analyzers: тщательно 9X_attribute подобранный список диагностических анализаторов 9X_attribute платформы компиляторов .NET ("Roslyn") и 9X_attributes исправлений кода. Здесь каждый может внести 9X_dot-net свой вклад! https://github.com/Cybermaxs/awesome-analyzers

4
0

Ответ #5

Ответ на вопрос: Уведомить разработчика о методе «НЕ ИСПОЛЬЗОВАТЬ»

На самом деле я был бы склонен не согласиться 9X_attribute со всеми, кто выступает за использование 9X_dotnet ObsoleteAttribute, поскольку в документации MSDN говорится, что:

Пометка 9X_dotnet элемента как устаревшего информирует пользователей 9X_dot-net о том, что этот элемент будет удален в будущих 9X_.net версиях продукта.

Поскольку универсальные 9X_attribute конструкторы для сериализации XML не следует 9X_attributes удалять из приложения, я бы не стал применять 9X_.net их на тот случай, если будущий разработчик 9X_dotnet сопровождения не знаком с тем, как работает 9X_dot-net сериализация XML.

На самом деле я использовал 9X_dotnet метод Keith's, просто отметив, что конструктор 9X_dotnet используется для сериализации в XML-документации, чтобы 9X_attribute он отображался в Intellisense.

3
0

Ответ #6

Ответ на вопрос: Уведомить разработчика о методе «НЕ ИСПОЛЬЗОВАТЬ»

Вы можете создать свой собственный производный 9X_attributes класс Attribute, скажем, NonCallableAttribute, чтобы квалифицировать 9X_.net методы, а затем добавить в свою задачу анализа 9X_dotnet кода сборки/CI проверку, чтобы отслеживать, использует 9X_attribute ли какой-либо код эти методы.

На мой взгляд, вы 9X_dotnet действительно не можете заставить разработчиков 9X_dot-net не использовать метод, но вы можете как 9X_.net-framework можно быстрее обнаружить, когда кто-то нарушил 9X_dotnet правило, и исправить это.

3
1

  • @deadManN До VS2015, насколько мне известно, не было простого способа имитировать предупреждение, которое Visual Studio показывает дл ...

Ответ #7

Ответ на вопрос: Уведомить разработчика о методе «НЕ ИСПОЛЬЗОВАТЬ»

Прочитал заголовок и сразу подумал "устаревший 9X_attributes атрибут". Как насчет

 /// 
/// do not use ///
 /// don't pass it anything -- you shouldn't use it. /// nothing - you shouldn't use it public bool Include(T item) { .... 

2
0