Uitgebreid nameof
bereik
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 notities van de Language Design Meeting (LDM) .
Meer informatie over het proces voor het aannemen van functiespeclets in de C#-taalstandaard vindt u in het artikel over de specificaties.
Samenvatting
Sta nameof(parameter)
toe in een kenmerk voor een methode of parameter.
Bijvoorbeeld:
[MyAttribute(nameof(parameter))] void M(int parameter) { }
[MyAttribute(nameof(TParameter))] void M<TParameter>() { }
void M(int parameter, [MyAttribute(nameof(parameter))] int other) { }
Motivatie
Kenmerken zoals NotNullWhen
of CallerExpression
moeten verwijzen naar parameters, maar deze parameters zijn momenteel niet binnen het bereik.
Gedetailleerd ontwerp
De type_parameters van de methode vallen binnen het bereik van de method_declarationen kunnen worden gebruikt om typen te vormen in return_type, method_bodyen type_parameter_constraints_clauses, maar niet in kenmerken, behalve binnen een nameof
expressie in kenmerken.
Een methodedeclaratie maakt een afzonderlijke declaratieruimte voor parameters, typeparameters en lokale variabelen. Namen worden in deze declaratieruimte geïntroduceerd door de parameterlijst van het type en de formele parameterlijst van de methode en door lokale variabeledeclaraties in het blok van de methode.
Namen worden in deze declaratieruimte geïntroduceerd door de lijst met typeparameters en de formele parameterlijst van de methode in nameof
expressies in kenmerken die zijn geplaatst op de methode of de bijbehorende parameters.
[...]
In het blok van een methode kunnen formele parameters worden geraadpleegd door hun identificaties in eenvoudige naam-expressies (Eenvoudige namen).
Binnen een nameof
expressie in kenmerken die zijn geplaatst op de methode of de bijbehorende parameters, kan naar formele parameters worden verwezen door hun identificatoren in simple_name expressie.
Het bereik van de parameters van de anonieme functie is de anonymous_function_body (§7.7) en nameof
expressies in kenmerken die zijn geplaatst op de anonieme functie of de parameters.
Het bereik van de parameters van de gemachtigde is nameof
expressies in kenmerken die zijn geplaatst in de declaratie, de bijbehorende typeparameters of de parameters.
Een simple_name is van de vorm I
of de vorm I<A1,...,Ak>
, waarbij I
één identificator is en <A1,...,Ak>
een optionele type-argumentenlijstis. Als er geen type_argument_list is opgegeven, wordt K
als nul beschouwd. De simple_name wordt als volgt geëvalueerd en geclassificeerd:
- Als
K
nul is en de simple_name binnen een blok wordt weergegeven en als de lokale declaratieruimte (of een omsluitblok) van het blok (declaraties) een lokale variabele, parameter of constante met naamI
bevat, verwijst de simple_name naar die lokale variabele, parameter of constante en wordt geclassificeerd als een variabele of waarde. - Als
K
nul is en de simple_name wordt weergegeven in de hoofdtekst van een algemene methodedeclaratie en als die declaratie een typeparameter met de naamI
bevat, verwijst de simple_name naar die typeparameter. -
Als
K
nul is en de simple_name wordt weergegeven in eennameof
expressie in een kenmerk van de methodedeclaratie of de bijbehorende parameters. Als die declaratie een parameter of typeparameter met de naamI
bevat, verwijst de simple_name naar die parameter of typeparameter. - Anders geldt dat voor elk instantie-type
T
(het instantie-type), te beginnen met het instantie-type van de declaratietype die het type onmiddellijk insluit en door te gaan met het instantie-type van elke insluitende klasse of struct-declaratie (indien van toepassing):
[...] - Anders worden voor elke naamruimte
N
, beginnend met de naamruimte waarin de simple_name voorkomt, door te gaan met elke omsluitende naamruimte (indien van toepassing) en eindigend met de globale naamruimte, de volgende stappen geëvalueerd totdat een entiteit is gevonden.
[...] - Anders is de simple_name niet gedefinieerd en treedt er een compileertijdfout op.
- Het bereik van een typeparameter die is gedeclareerd door een type_parameter_list op een method_declaration is [...] en
nameof
expressies in een kenmerk voor de methodedeclaratie of de bijbehorende parameters. - Het bereik van een parameter die is gedeclareerd in een method_declaration (Methoden) is de method_body van die method_declaration en
nameof
expressies in een kenmerk voor de methodedeclaratie of de bijbehorende parameters.
Verwante specificatiesecties
C# feature specifications