ЭкспериментальныйАтрибут
Заметка
Эта статья является спецификацией компонентов. Спецификация служит проектным документом для функции. Она включает предлагаемые изменения спецификации, а также информацию, необходимую во время дизайна и разработки функции. Эти статьи публикуются до тех пор, пока предложенные изменения спецификации не будут завершены и включены в текущую спецификацию ECMA.
Может возникнуть некоторое несоответствие между спецификацией компонентов и завершенной реализацией. Эти различия отражены в соответствующих записях собрания по проектированию языка (LDM) .
Дополнительные сведения о процессе внедрения спецификаций функций в стандарт языка C# см. в статье о спецификациях .
Сообщайте предупреждения о ссылках на типы и элементы, отмеченные System.Diagnostics.CodeAnalysis.ExperimentalAttribute
.
namespace System.Diagnostics.CodeAnalysis
{
[AttributeUsage(AttributeTargets.Assembly |
AttributeTargets.Module |
AttributeTargets.Class |
AttributeTargets.Struct |
AttributeTargets.Enum |
AttributeTargets.Constructor |
AttributeTargets.Method |
AttributeTargets.Property |
AttributeTargets.Field |
AttributeTargets.Event |
AttributeTargets.Interface |
AttributeTargets.Delegate, Inherited = false)]
public sealed class ExperimentalAttribute : Attribute
{
public ExperimentalAttribute(string diagnosticId)
{
DiagnosticId = diagnosticId;
}
public string DiagnosticId { get; }
public string? UrlFormat { get; set; }
public string? Message { get; set; }
}
}
Сообщаемая диагностика
Хотя диагностика технически является предупреждением, поэтому компилятор позволяет подавлять его, он рассматривается как ошибка для создания отчетов. Это приводит к сбою сборки, если диагностика не подавляется.
Диагностика сообщается для любой ссылки на тип или элемент, который является одним из следующих:
- помечен атрибутом,
- в сборке или модуле, помеченном атрибутом,
за исключением случаев, когда ссылка возникает в элементах [Experimental]
, она автоматически подавляется.
Также можно отключить диагностику обычными средствами, например явным параметром компилятора или #pragma
.
Например, если API помечен как [Experimental("DiagID")]
или [Experimental("DiagID", UrlFormat = "https://example.org/{0}")]
, диагностику можно отключить с помощью #pragma warning disable DiagID
.
Ошибка возникает, если идентификатор диагностики, заданный экспериментальным атрибутом, не является допустимым идентификатором C#.
Если значение свойства Message
не указано, диагностическое сообщение будет специальным сообщением, в котором '{0}'
является полностью квалифицированным именем типа или члена.
'{0}' is for evaluation purposes only and is subject to change or removal in future updates.
Если для свойства Message
задано значение, то диагностическое сообщение становится конкретным сообщением, в котором '{0}'
является полным именем типа или члена, а '{1}'
представляет собой Message
.
'{0}' is for evaluation purposes only and is subject to change or removal in future updates: '{1}'.
Атрибут не наследуется от базовых типов или переопределенных элементов.
Устаревшая и нерекомендуемаяAttribute
Предупреждения для [Experimental]
сообщаются в [Obsolete]
или [Deprecated]
членах.
Предупреждения и ошибки для [Obsolete]
и [Deprecated]
сообщаются членами [Experimental]
.
Но предупреждения и ошибки для [Obsolete]
и [Deprecated]
сообщаются вместо [Experimental]
, если существует несколько атрибутов.
C# feature specifications