Błędy i ostrzeżenia związane z partial
deklaracjami typów i partial
składowych
Istnieje wiele błędów związanych z partial
deklaracjami typów i partial
składowych:
- CS0260: Brak częściowego modyfikatora deklaracji typu; istnieje inna częściowa deklaracja tego typu
- CS0261: Częściowe deklaracje typu muszą być wszystkimi klasami, wszystkimi strukturami lub wszystkimi interfejsami
- CS0262: Częściowe deklaracje typu mają sprzeczne modyfikatory ułatwień dostępu
- CS0263: Częściowe deklaracje typu nie mogą określać różnych klas bazowych
- CS0264: Częściowe deklaracje typu muszą mieć takie same nazwy parametrów typu w tej samej kolejności
- CS0265: Częściowe deklaracje typu mają niespójne ograniczenia dla parametru typu "type parameter"
- CS0267: Modyfikator "
partial
" może pojawić się bezpośrednio przed "class
", "record
", "struct
", "interface
" lub metodą lub typem zwracanym właściwości. - CS0282: Nie ma zdefiniowanej kolejności między polami w wielu deklaracjach częściowej klasy lub struktury "type". Aby określić kolejność, wszystkie pola wystąpień muszą znajdować się w tej samej deklaracji.
- CS0501: "funkcja składowa" musi zadeklarować treść, ponieważ nie jest oznaczona ,
abstract
extern
lubpartial
- CS0750: Częściowy element członkowski nie może mieć modyfikatora "
abstract
". - CS0751: Częściowy element członkowski musi być zadeklarowany w częściowej lub częściowej
class
struct
- CS0754: Częściowy element członkowski nie może jawnie implementować metody interfejsu.
- CS0755: Obie częściowe deklaracje metody muszą być metodami rozszerzenia lub żadna z nich nie może być metodą rozszerzenia.
- CS0756: Metoda częściowa może nie zawierać wielu deklaracji definiujących.
- CS0757: Metoda częściowa może nie zawierać wielu deklaracji implementowania.
- CS0759: Nie znaleziono deklaracji definiującej do implementowania deklaracji metody częściowej.
- CS0761: Częściowe deklaracje metody mają niespójne ograniczenia parametrów
method<T>
typu. - CS0762: Nie można utworzyć delegata z metody, ponieważ jest to metoda częściowa bez deklaracji implementowania
- CS0763: Obie deklaracje metody częściowej muszą mieć wartość
static
lub żadna z nich nie może byćstatic
. - CS0764: Oba deklaracje metody częściowej muszą być
unsafe
lub nie mogą byćunsafe
- CS1067: Deklaracje częściowe muszą mieć takie same nazwy parametrów typu i modyfikatory wariancji w tej samej kolejności.
- CS8142: Obie deklaracje częściowych składowych muszą używać tych samych nazw elementów krotki.
- CS8663: Obie częściowe deklaracje składowe muszą być odczytane lub nie mogą być odczytane
- CS8796: Metoda częściowa musi mieć modyfikatory ułatwień dostępu, ponieważ ma zwracany typ niepusty.
- CS8795: Częściowy element członkowski musi mieć część implementacji, ponieważ ma modyfikatory ułatwień dostępu.
- CS8797: Metoda częściowa musi mieć modyfikatory ułatwień dostępu, ponieważ ma parametry "
out
". - CS8798: Metoda częściowa musi mieć modyfikatory ułatwień dostępu, ponieważ ma modyfikator "
virtual
", "override
", "sealed
new
" lub "extern
". - CS8799: Obie częściowe deklaracje składowe muszą mieć identyczne modyfikatory ułatwień dostępu.
- CS8800: Oba deklaracje częściowych składowych muszą mieć identyczne kombinacje
virtual
,override
,sealed
inew
modyfikatorów. - CS8817: Obie deklaracje metody częściowej muszą mieć ten sam typ zwracany.
- CS8818: Częściowe deklaracje składowe muszą mieć pasujące wartości zwracane
ref
. - CS8863: Lista parametrów może zawierać tylko pojedynczą deklarację typu częściowego
- CS8988:
scoped
Modyfikator parametru nie jest zgodny z definicją częściową. - CS9248: Właściwość częściowa musi mieć część implementacji.
- CS9249: Właściwość częściowa musi mieć część definicji.
- CS9250: Właściwość częściowa może nie zawierać wielu deklaracji definiujących i nie może być właściwością automatyczną.
- CS9251: Właściwość częściowa może nie zawierać wielu deklaracji implementowania
- CS9252: Należy zaimplementować metodę dostępu właściwości, ponieważ jest zadeklarowana w części definicji
- CS9253: Metoda dostępu właściwości nie implementuje żadnego metody dostępu zadeklarowanego w części definicji
- CS9254: Akcesorium właściwości musi być zgodne z częścią definicji
- CS9255: Oba deklaracje właściwości częściowych muszą mieć ten sam typ.
- CS9256: Deklaracje właściwości częściowych mają różnice w podpisie.
- CS9257: Oba deklaracje właściwości częściowych muszą być wymagane lub nie mogą być wymagane
- CS9258: W tej wersji języka słowo kluczowe "
field
" wiąże się z syntetyzowanym polem zapasowym dla właściwości. Aby uniknąć generowania zsyntetyzowanego pola zapasowego i odwołać się do istniejącego elementu członkowskiego, zamiast tego użyj "this.field
" lub "@field
". - CS9263: Właściwość częściowa nie może mieć inicjatora zarówno definicji, jak i implementacji.
Dla właściwości opartych na polach można wygenerować następujące ostrzeżenia:
- CS9264: Właściwość niepustalna musi zawierać wartość inną niż null podczas zamykania konstruktora. Rozważ dodanie modyfikatora "wymagane" lub zadeklarowanie właściwości jako dopuszczającej wartość null lub dodanie atrybutów "
[field: MaybeNull, AllowNull]
".* - CS9266: Jeden akcesor właściwości powinien używać "
field
", ponieważ drugi akcesorium używa go.
W poniższych sekcjach opisano przyczynę i poprawki tych błędów i ostrzeżeń.
Typy częściowe
- CS0260: Brak częściowego modyfikatora deklaracji typu; istnieje inna częściowa deklaracja tego typu
- CS0261: Częściowe deklaracje typu muszą być wszystkimi klasami, wszystkimi strukturami lub wszystkimi interfejsami
- CS0262: Częściowe deklaracje typu mają sprzeczne modyfikatory ułatwień dostępu
- CS0263: Częściowe deklaracje typu nie mogą określać różnych klas bazowych
- CS0264: Częściowe deklaracje typu muszą mieć takie same nazwy parametrów typu w tej samej kolejności
- CS0265: Częściowe deklaracje typu mają niespójne ograniczenia dla parametru typu "type parameter"
- CS0267: Modyfikator "
partial
" może pojawić się bezpośrednio przed "class
", "record
", "struct
", "interface
" lub metodą lub typem zwracanym właściwości. - CS8863: Lista parametrów może zawierać tylko pojedynczą deklarację typu częściowego
Deklaracja typu częściowego może spowodować, że kompilator emituje następujące ostrzeżenie:
- CS0282: Nie ma zdefiniowanej kolejności między polami w wielu deklaracjach częściowych
class
lubstruct
"typu". Aby określić kolejność, wszystkie pola wystąpień muszą znajdować się w tej samej deklaracji.
W przypadku dowolnego typu partial
częściowego słowo kluczowe musi natychmiast poprzedzać class
, , record
struct
lub interface
. Kompilator emituje błąd, jeśli występuje w jakiejkolwiek innej kolejności. Dodatkowo:
- Wszystkie deklaracje typu częściowego muszą być zgodne pod względem typu (
class
,struct
, ,record class
record struct
, ,readonly struct
lubreadonly record struct
). - Wszystkie deklaracje muszą zawierać
partial
modyfikator. - Deklaracje ogólnego typu częściowego muszą zawierać te same parametry typu w tej samej kolejności.
Niektóre części deklaracji nie muszą być powtarzane we wszystkich deklaracjach typu. Jeśli jednak te elementy są powtarzane w wielu partial
deklaracjach, muszą być zgodne z następującymi elementami:
- Wszelkie modyfikatory dostępu, takie jak
public
. - Dowolna klasa podstawowa lub zaimplementowane interfejsy.
- Wszelkie ograniczenia dotyczące parametrów typu.
Konstruktor podstawowy można zadeklarować w co najwyżej jednej deklaracji dla typu częściowego.
Kompilator ostrzega, jeśli masz wiele pól zadeklarowanych w wielu plikach dla partial struct
typu. Jeśli kolejność układu jest ważna, należy zadeklarować wszystkie pola w tym samym pliku. Jeśli kolejność nie ma znaczenia, możesz użyć System.Runtime.InteropServices.StructLayoutAttribute wartości z wartością LayoutKind.Auto .
Częściowe elementy członkowskie
- CS0750: Częściowy element członkowski nie może mieć modyfikatora "
abstract
". - CS0751: Częściowy element członkowski musi być zadeklarowany w częściowej lub częściowej
class
struct
- CS0754: Częściowy element członkowski nie może jawnie implementować metody interfejsu.
- CS0763: Obie deklaracje metody częściowej muszą mieć wartość
static
lub żadna z nich nie może byćstatic
. - CS0764: Oba deklaracje metody częściowej muszą być
unsafe
lub nie mogą byćunsafe
- CS8142: Obie deklaracje częściowych składowych muszą używać tych samych nazw elementów krotki.
- CS8663: Obie częściowe deklaracje składowe muszą być odczytane lub nie mogą być odczytane
- CS8799: Obie częściowe deklaracje składowe muszą mieć identyczne modyfikatory ułatwień dostępu.
- CS8800: Oba deklaracje częściowych składowych muszą mieć identyczne kombinacje
virtual
,override
,sealed
inew
modyfikatorów. - CS8818: Częściowe deklaracje składowe muszą mieć pasujące wartości zwracane
ref
. - CS8988:
scoped
Modyfikator parametru nie jest zgodny z definicją częściową.
Częściowe składowe mają dwie deklaracje. Deklaracja bez implementacji jest deklaracją deklaratywną. Deklaracja z implementacją jest deklaracją implementowania. Częściowe elementy członkowskie są dozwolone tylko w typie partial
. Częściowe składowe nie mogą być abstract
. Częściowe elementy członkowskie nie mogą jawnie implementować interfejsu. Obie deklaracje częściowego elementu członkowskiego muszą mieć identyczne podpisy. Na przykład obie lub żadne deklaracje nie mogą zawierać static
modyfikatorów lub unsafe
.
Metody częściowe
- CS0501: "funkcja składowa" musi zadeklarować treść, ponieważ nie jest oznaczona ,
abstract
extern
lubpartial
- CS0755: Obie częściowe deklaracje metody muszą być metodami rozszerzenia lub żadna z nich nie może być metodą rozszerzenia.
- CS0756: Metoda częściowa może nie zawierać wielu deklaracji definiujących.
- CS0757: Metoda częściowa może nie zawierać wielu deklaracji implementowania.
- CS0759: Nie znaleziono deklaracji definiującej do implementowania deklaracji metody częściowej.
- CS0761: Częściowe deklaracje metody mają niespójne ograniczenia parametrów
method<T>
typu. - CS0762: Nie można utworzyć delegata z metody, ponieważ jest to metoda częściowa bez deklaracji implementowania
- CS1067: Deklaracje częściowe muszą mieć takie same nazwy parametrów typu i modyfikatory wariancji w tej samej kolejności.
- CS8796: Metoda częściowa musi mieć modyfikatory ułatwień dostępu, ponieważ ma zwracany typ niepusty.
- CS8795: Częściowy element członkowski musi mieć część implementacji, ponieważ ma modyfikatory ułatwień dostępu.
- CS8797: Metoda częściowa musi mieć modyfikatory ułatwień dostępu, ponieważ ma parametry "
out
". - CS8798: Metoda częściowa musi mieć modyfikatory ułatwień dostępu, ponieważ ma modyfikator "
virtual
", "override
", "sealed
new
" lub "extern
". - CS8817: Obie deklaracje metody częściowej muszą mieć ten sam typ zwracany.
Niektóre partial
deklaracje metod nie wymagają deklaracji implementowania. Oznacza to, że jeśli element członkowski zwraca void
wartość , nie deklaruje żadnych modyfikatorów dostępu (w tym modyfikatora domyślnego private
) i nie zawiera żadnego z virtual
modyfikatorów , override
, sealed
ani new
. W przeciwnym razie każda metoda częściowa musi zawierać deklaracje deklarowane i implementujące.
Gdy metoda częściowa zawiera deklarację implementa, obie deklaracje muszą być identyczne. Można zdefiniować dokładnie jedną deklarację implementacji.
Właściwości częściowe
Następujące błędy wskazują błędy w częściowych deklaracjach właściwości lub indeksatora:
- CS9248: Właściwość częściowa musi mieć część implementacji.
- CS9249: Właściwość częściowa musi mieć część definicji.
- CS9250: Właściwość częściowa może nie zawierać wielu deklaracji definiujących i nie może być właściwością automatyczną.
- CS9251: Właściwość częściowa może nie zawierać wielu deklaracji implementowania
- CS9252: Należy zaimplementować metodę dostępu właściwości, ponieważ jest zadeklarowana w części definicji
- CS9253: Metoda dostępu właściwości nie implementuje żadnego metody dostępu zadeklarowanego w części definicji
- CS9254: Akcesorium właściwości musi być zgodne z częścią definicji
- CS9255: Oba deklaracje właściwości częściowych muszą mieć ten sam typ.
- CS9257: Oba deklaracje właściwości częściowych muszą być wymagane lub nie mogą być wymagane
Następujące ostrzeżenie wskazuje różnicę podpisu w deklarowaniu i implementowaniu deklaracji we właściwości częściowej:
- CS9256: Deklaracje właściwości częściowych mają różnice w podpisie.
Właściwość częściowa lub indeksator musi mieć zarówno deklarację deklaratywną, jak i deklarację implementowania. Podpisy obu deklaracji muszą być zgodne. Ponieważ deklaracja deklaratora używa tej samej składni co właściwość zaimplementowana automatycznie, deklaracja implementowana nie może być automatycznie zaimplementowaną właściwością. Akcesoria muszą mieć co najmniej jedną treść akcesoriów. Począwszy od języka C# 13, możesz użyć słowa kluczowego field
, aby zadeklarować jedno akcesorium przy użyciu zwięzłej składni:
public partial int ImplementingDeclaration { get => field; set; }
właściwości kopii zapasowej pola
- CS9258: W tej wersji języka słowo kluczowe "
field
" wiąże się z syntetyzowanym polem zapasowym dla właściwości. Aby uniknąć generowania zsyntetyzowanego pola zapasowego i odwołać się do istniejącego elementu członkowskiego, zamiast tego użyj "this.field
" lub "@field
". - CS9263: Właściwość częściowa nie może mieć inicjatora zarówno definicji, jak i implementacji.
- CS9264: Właściwość niepustalna musi zawierać wartość inną niż null podczas zamykania konstruktora. Rozważ dodanie modyfikatora "wymagane" lub zadeklarowanie właściwości jako dopuszczającej wartość null lub dodanie atrybutów "
[field: MaybeNull, AllowNull]
".* - CS9266: Jeden akcesor właściwości powinien używać "
field
", ponieważ drugi akcesorium używa go.
Ważne
Słowo field
kluczowe jest funkcją w wersji zapoznawczej w języku C# 13. Musisz użyć platformy .NET 9 i ustawić element <LangVersion>
na preview
w pliku projektu, aby użyć field
kontekstu słowa kluczowego.
Należy zachować ostrożność przy użyciu funkcji słowa kluczowego field
w klasie, która ma pole o nazwie field
. Nowe field
słowo kluczowe cieniuje pole o nazwie field
w zakresie metody dostępu właściwości. Możesz zmienić nazwę zmiennej field
lub użyć tokenu @
, aby odwołać się do identyfikatora field
jako @field
. Aby dowiedzieć się więcej, przeczytaj specyfikację funkcji słowa kluczowego field
.
Począwszy od języka C# 13, funkcja w wersji zapoznawczej, field
obsługiwane właściwości umożliwiają dostęp do syntetyzowanego pola kopii zapasowej kompilatora dla właściwości. CS9258 wskazuje, że masz zmienną o nazwie field
, która może być ukryta przez kontekstowe słowo kluczowe field
.
CS9263 wskazuje, że deklaracja deklarowana zawiera implementację. Ta implementacja może uzyskiwać dostęp do pola kopii zapasowej syntetyzowanego kompilatora dla tej właściwości. CS9264 wskazuje, że używane przez Użytkownika pole tworzenia kopii field
zapasowej bez wartości null, podczas gdy deklaracja właściwości jest dopuszczana do wartości null. Kompilator zakłada, że zarówno pole zapasowe, jak i właściwość mają taką samą wartość null. Należy dodać [field:MaybeNull, AllowNull]
atrybut do deklaracji właściwości, aby wskazać, że field
wartość powinna być uważana za dopuszczającą wartość null. CS9266 wskazuje, że jeden z metod dostępu właściwości używa field
słowa kluczowego, ale drugi używa ręcznie zadeklarowanego pola zapasowego. Ostrzeżenie wskazuje, że mogło to zrobić przypadkowo.