Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Błędy i ostrzeżenia skojarzone z typami
- CS8343:
ref structsnie można zaimplementować interfejsów - CS8344:
foreachinstrukcja nie może działać na modułach wyliczających w metodach asynchronicznych lub iteratorowych, ponieważ typ jest parametremref structlub typem, który zezwala naref struct. - CS8345: Właściwość pola lub zaimplementowana automatycznie nie może być typu, chyba że jest członkiem wystąpienia
ref structklasy . - CS9048:
scopedModyfikator może służyć tylko do refs iref structwartości. - CS9050:
refPole nie może odwoływać się do elementuref struct. - CS9059: Pole ref można zadeklarować tylko w strukturze ref.
- CS9241: "refstruct" jest już określony.
- CS9242: Klauzula ograniczenia "zezwala" musi być ostatnim ograniczeniem określonym.
- CS9243: Nie można zezwolić na struktury ref dla parametru typu znanego z innych ograniczeń jako klasy.
- CS9244: Typ może nie być parametrem
ref structlub typem umożliwiającym struktury ref w celu użycia go jako parametru w typie ogólnym lub metodzie. - CS9245: Typ nie może zaimplementować elementu członkowskiego interfejsu dla
ref structtypu. - CS9246: Nie można uzyskać dostępu do elementu członkowskiego interfejsu wystąpienia niewirtualnego w parametrze typu, który umożliwia strukturę ref.
- CS9247: instrukcja foreach nie może działać na modułach wyliczających typu, ponieważ jest to parametr typu, który umożliwia strukturę refruktury i nie jest znany w czasie kompilacji w celu zaimplementowania
IDisposableelementu . - CS9267: Typ elementu iteratora może nie być strukturą ref lub parametrem typu umożliwiającym struktury ref
naruszenia bezpieczeństwa ref
- CS8345: Właściwość pola lub zaimplementowana automatycznie nie może być typu, chyba że jest członkiem wystąpienia
ref structklasy . - CS9048:
scopedModyfikator może służyć tylko do refs iref structwartości. - CS9050:
refPole nie może odwoływać się do elementuref struct. - CS9059:
refPole można zadeklarować tylko w obiekcieref struct.
Typ ref struct może zawierać ref pola. Inne typy nie są dozwolonymi ref polami. Kompilator wymusza ograniczenia dotyczące deklaracji i użycia ref struct typów w celu wymuszania reguł bezpieczeństwa ref dla wystąpień dowolnego ref struct typu:
- Tylko
ref structtypy mogą zawierać automatycznie zaimplementowanerefwłaściwości. - Modyfikator może zawierać
scopedtylkoref structtypy lubrefzmienne. refPole można zadeklarować tylko w typieref struct.- Pole
refnie może odwoływać się doref structtypu/
Naruszenie któregokolwiek z tych zasad powoduje jeden z wymienionych błędów. Jeśli zamierzasz użyć tej funkcji językowej, przekonwertuj ref structtyp na . W przeciwnym razie usuń niedozwoloną konstrukcję.
implementacje interfejsu struktury ref
- CS8343:
ref structsnie można zaimplementować interfejsów - CS8344:
foreachinstrukcja nie może działać na modułach wyliczających w metodach asynchronicznych lub iteratorowych, ponieważ typ jest parametremref structlub typem, który zezwala naref struct. - CS9241: "refstruct" jest już określony.
- CS9242: Klauzula ograniczenia "zezwala" musi być ostatnim ograniczeniem określonym.
- CS9243: Nie można zezwolić na struktury ref dla parametru typu znanego z innych ograniczeń jako klasy.
- CS9244: Typ może nie być parametrem
ref structlub typem umożliwiającym struktury ref w celu użycia go jako parametru w typie ogólnym lub metodzie. - CS9245: Typ nie może zaimplementować elementu członkowskiego interfejsu dla
ref structtypu. - CS9246: Nie można uzyskać dostępu do elementu członkowskiego interfejsu wystąpienia niewirtualnego w parametrze typu, który umożliwia strukturę ref.
- CS9247: instrukcja foreach nie może działać na modułach wyliczających typu, ponieważ jest to parametr typu, który umożliwia strukturę refruktury i nie jest znany w czasie kompilacji w celu zaimplementowania
IDisposableelementu . - CS9267: Typ elementu iteratora może nie być strukturą ref lub parametrem typu umożliwiającym struktury ref
Przed C# 13 ref struct typy nie mogą implementować interfejsów; kompilator generuje CS8343. Począwszy od języka C# 13, ref struct typy mogą implementować interfejsy, zgodnie z następującymi regułami:
ref structNie można przekonwertować obiektu na wystąpienie implementowanego interfejsu. To ograniczenie obejmuje niejawnąref structkonwersję w przypadku użycia typu jako argumentu, gdy parametr jest typem interfejsu. Konwersja powoduje konwersję boksu, która narusza bezpieczeństwo ref.- Element
ref structimplementujący interfejs musi implementować wszystkie elementy członkowskie interfejsu. Elementref structmusi implementować elementy członkowskie, w których interfejs zawiera domyślną implementację.
Począwszy od języka C# 13, ref struct można użyć jako argumentu typu dla parametru typu ogólnego, jeśli i tylko wtedy, gdy parametr typu ogólnego ma allows ref struct ograniczenie. W przypadku korzystania z allows ref struct ograniczeń antywłaściwych należy przestrzegać następujących reguł:
- A
ref structjest używany jako argument typu, parametr typu musi miećallows ref structograniczenie przeciw.- Ograniczenieallows ref structanty-ograniczenie musi być ostatnie wwhereklauzuli dla tego parametru. - Użycie wystąpień parametru typu musi przestrzegać reguł bezpieczeństwa ref.
- Argument
ref structtypu lub, który może być typemref struct, nie może być używany jako typ elementu dla metody iteratora.