Delen via


ExperimentalAttribute

Notitie

Dit artikel is een functiespecificatie. De specificatie fungeert als het ontwerpdocument voor de functie. Het bevat voorgestelde specificatiewijzigingen, samen met informatie die nodig is tijdens het ontwerp en de ontwikkeling van de functie. Deze artikelen worden gepubliceerd totdat de voorgestelde specificaties zijn voltooid en opgenomen in de huidige ECMA-specificatie.

Er kunnen enkele verschillen zijn tussen de functiespecificatie en de voltooide implementatie. Deze verschillen worden vastgelegd in de relevante LDM-notities (Language Design Meeting).

Meer informatie over het proces voor het aannemen van functiespeclets in de C#-taalstandaard vindt u in het artikel over de specificaties.

Rapporteer waarschuwingen voor verwijzingen naar typen en leden die zijn gemarkeerd met 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; }
    }
}

Gerapporteerd diagnostische gegevens

Hoewel de diagnose technisch gezien een waarschuwing is, zodat de compiler dit toestaat te onderdrukken, wordt deze behandeld als een fout voor rapportage. Dit zorgt ervoor dat de build mislukt als de diagnose niet wordt onderdrukt.

De diagnostische waarschuwing wordt gemeld bij een verwijzing naar een type of lid dat:

  • gemarkeerd met het kenmerk,
  • in een samenstelling of module die is gemarkeerd met het kenmerk,

Behalve wanneer de verwijzing binnen [Experimental] leden plaatsvindt, wordt deze automatisch onderdrukt.

Het is ook mogelijk om de diagnose op gebruikelijke wijze te onderdrukken, zoals een expliciete compileroptie of #pragma.
Als de API bijvoorbeeld is gemarkeerd met [Experimental("DiagID")] of [Experimental("DiagID", UrlFormat = "https://example.org/{0}")], kan de diagnose worden onderdrukt met #pragma warning disable DiagID.

Er wordt een fout gegenereerd als de diagnostische id die aan het experimentele kenmerk wordt gegeven, geen geldige C#-id is.

Als er geen waarde voor Message eigenschap wordt opgegeven, is het diagnostische bericht een specifiek bericht, waarbij '{0}' het volledig gekwalificeerde type of lidnaam is.

'{0}' is for evaluation purposes only and is subject to change or removal in future updates.

Als er een waarde voor Message eigenschap wordt opgegeven, is het diagnostische bericht een specifiek bericht, waarbij '{0}' het volledig gekwalificeerde type of lidnaam is en '{1}' de Messageis.

'{0}' is for evaluation purposes only and is subject to change or removal in future updates: '{1}'.

Het kenmerk wordt niet overgenomen van basistypen of overschreven leden.

ObsoleteAttribute en DeprecatedAttribute

Waarschuwingen voor [Experimental] worden gerapporteerd binnen de leden van [Obsolete] of [Deprecated].
Waarschuwingen en fouten voor [Obsolete] en [Deprecated] worden binnen [Experimental] leden gerapporteerd.
Maar waarschuwingen en fouten voor [Obsolete] en [Deprecated] worden gerapporteerd in plaats van [Experimental] als er meerdere kenmerken zijn.