Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Rozszerzony zakres
Notatka
Ten artykuł jest specyfikacją funkcji. Specyfikacja służy jako dokument projektowy dla funkcji. Zawiera proponowane zmiany specyfikacji wraz z informacjami wymaganymi podczas projektowania i opracowywania funkcji. Te artykuły są publikowane do momentu sfinalizowania proponowanych zmian specyfikacji i włączenia ich do obecnej specyfikacji ECMA.
Mogą wystąpić pewne rozbieżności między specyfikacją funkcji a ukończoną implementacją. Te różnice są przechwytywane w odpowiednich spotkania projektowego języka (LDM).
Więcej informacji na temat procesu wdrażania specyfikacji funkcji można znaleźć w standardzie języka C# w artykule dotyczącym specyfikacji .
Problem z mistrzem: https://github.com/dotnet/csharplang/issues/373
Streszczenie
Zezwalaj na nameof(parameter) wewnątrz atrybutu metody lub parametru.
Na przykład:
[MyAttribute(nameof(parameter))] void M(int parameter) { }[MyAttribute(nameof(TParameter))] void M<TParameter>() { }void M(int parameter, [MyAttribute(nameof(parameter))] int other) { }
Motywacja
Atrybuty takie jak NotNullWhen lub CallerExpression muszą odwoływać się do parametrów, ale te parametry nie są obecnie w zakresie.
Szczegółowy projekt
Parametry typu metody znajdują się w zakresie w deklaracji metodyi mogą być używane do tworzenia typów w tym zakresie w typie zwracanym, ciele metodyi klauzulach ograniczeń parametrów typu, ale nie w atrybutach, z wyjątkiem wyrażenia nameof w atrybutach.
Deklaracja metody tworzy oddzielną przestrzeń deklaracji dla parametrów, parametrów typu i zmiennych lokalnych. Nazwy są wprowadzane do tej przestrzeni deklaracji przez listę parametrów typu oraz formalną listę parametrów metody i deklaracje zmiennych lokalnych w bloku metody.
Nazwy są wprowadzane do tej przestrzeni deklaracji przez listę parametrów typu i formalną listę parametrów metody w wyrażeniach nameof w atrybutach umieszczonych w metodzie lub jej parametrach.
[...]
W bloku metody parametry formalne mogą być przywoływane przez ich identyfikatory w wyrażeniach simple_name (proste nazwy).
W wyrażeniu nameof w atrybutach umieszczonych w metodzie lub jej parametrach parametry formalne mogą być przywoływane przez ich identyfikatory w wyrażeniach simple_name.
Zakres parametrów funkcji anonimowej obejmuje ciało funkcji anonimowej (§7.7) oraz wyrażenia i nameof w atrybutach umieszczonych na funkcji anonimowej lub jej parametrach.
Zakres parametrów delegata to nameof wyrażenia w atrybutach zamieszczonych w deklaracji, jego parametrach typu lub parametrach.
simple_name jest albo I wzoru, albo I<A1,...,Ak>wzoru, gdzie I jest pojedynczym identyfikatorem, a <A1,...,Ak> jest opcjonalną listą_argumentów_typu. Jeśli nie określono type_argument_list, należy uznać K za zero.
simple_name jest oceniany i klasyfikowany w następujący sposób:
- Jeśli
Kwynosi zero, a simple_name pojawia się w bloku i jeśli blok (lub blok otaczający) obszar deklaracji zmiennych lokalnych (Deklaracje) zawiera zmienną lokalną, parametr lub stałą o nazwieI, to simple_name odnosi się do tej zmiennej lokalnej, parametru lub stałej i jest klasyfikowane jako zmienna lub wartość. - Jeśli
Kma wartość zero, a simple_name pojawia się w treści deklaracji metody ogólnej, a jeśli ta deklaracja zawiera parametr typu o nazwieI, simple_name odnosi się do tego parametru typu. -
Jeśli
Kma wartość zero, a simple_name pojawia się wnameofw wyrażeniu w atrybucie w deklaracji metody lub jego parametrach, a jeśli ta deklaracja zawiera parametr lub parametr typu o nazwieI, simple_name odnosi się do tego parametru lub parametru typu. - W przeciwnym razie dla każdego typu wystąpienia
T(typ wystąpienia), począwszy od typu wystąpienia deklaracji typu bezpośrednio otaczającej i kontynuując od typu wystąpienia każdej otaczającej klasy lub struktury (jeśli istnieje):
[...] - W przeciwnym razie dla każdej przestrzeni nazw
N, począwszy od przestrzeni nazw, w której występuje simple_name, kontynuując każdą otaczającą przestrzeń nazw (jeśli istnieje), a kończąc na globalnej przestrzeni nazw, następujące kroki są oceniane do momentu zlokalizowania jednostki:
[...] - W przeciwnym razie simple_name nie jest zdefiniowany i występuje błąd w czasie kompilacji.
- Zakres parametru typu zadeklarowanego przez type_parameter_list w method_declaration to [...] i
nameofwyrażenia w atrybucie deklaracji metody lub jego parametrów. - Zakres parametru zadeklarowanego w deklaracji_metody (Metody) to ciało_metody tej deklaracji_metody i
nameofw wyrażeniach w atrybucie przy deklaracji metody lub jej parametrów.
Powiązane sekcje specyfikacji
C# feature specifications