Уведомить разработчика о методе «НЕ ИСПОЛЬЗОВАТЬ»
Хорошо, я знаю, что вы думаете: «Зачем писать 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.
Ответ #1
Ответ на вопрос: Уведомить разработчика о методе «НЕ ИСПОЛЬЗОВАТЬ»
Вы можете использовать:
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
, чтобы он не отображался 9X_.net в IntelliSense. Если потребитель все еще 9X_.net хочет использовать его, он может это сделать, но 9X_dotnet его будет не так легко обнаружить.
Тем не 9X_dotnet менее точка зрения Кита о перепроектировании 9X_attributes остается в силе.
- Это больше не работает с 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 это для действительно устаревших методов.
Ответ #3
Ответ на вопрос: Уведомить разработчика о методе «НЕ ИСПОЛЬЗОВАТЬ»
throw new ISaidDoNotUseException();
9X_dot-net
- Я разрываюсь между голосованием "против", потому что это сломает ...
Ответ #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
Ответ #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.
Ответ #6
Ответ на вопрос: Уведомить разработчика о методе «НЕ ИСПОЛЬЗОВАТЬ»
Вы можете создать свой собственный производный 9X_attributes класс Attribute
, скажем, NonCallableAttribute
, чтобы квалифицировать 9X_.net методы, а затем добавить в свою задачу анализа 9X_dotnet кода сборки/CI проверку, чтобы отслеживать, использует 9X_attribute ли какой-либо код эти методы.
На мой взгляд, вы 9X_dotnet действительно не можете заставить разработчиков 9X_dot-net не использовать метод, но вы можете как 9X_.net-framework можно быстрее обнаружить, когда кто-то нарушил 9X_dotnet правило, и исправить это.
- @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) {
....
-
11
-
7
-
18
-
9
-
10
-
8
-
4
-
4
-
14
-
4
-
3
-
4
-
2
-
7
-
4
-
1
-
3
-
2
-
2
-
4
-
3
-
6
-
4
-
4
-
4
-
2
-
7
-
3
-
2
-
3
-
7
-
15
-
5
-
4
-
6
-
7
-
4
-
8
-
3
-
10
-
7
-
4
-
6
-
6
-
4
-
7
-
14
-
5
-
13
-
4