Jak używać „członków danych” w języku C # -9
Próbowałem nowej składni C # 9, ale nie udało mi się użyć członków danych .
Dokumenty mówią, że składnia jest następująca:
public data class Person { string FirstName; string LastName; }
Jednak napotkałem następujące błędy kompilacji:
CS0116: A namespace cannot directly contain members such as fields or methods
IDE1007: The name 'data' does not exist in the current context.
Próbowałem innych składni i wszystkie działały. Jestem więc pewien, że używam C # -9
Aktualizacja: to pytanie jest sugerowane jako możliwa odpowiedź.
Ale to nie jest moja odpowiedź i uważam, że zaakceptowana odpowiedź w tym linku jest błędna. Typy rekordów i członkowie danych to dwie różne rzeczy. Członkowie danych to nowy sposób definiowania niezmiennych typów, podczas gdy typy rekordów to obiekty wartości.
Dokumenty sugerują, że w klasach składowych danych wystarczy zdefiniować właściwości, takie jak pola prywatne, więc Person
jest równe:
public data class Person
{
public string FirstName { get; init; }
public string LastName { get; init; }
}
Odpowiedzi
data
klasy są teraz nazywane record
. Są to te same, niezmienne obiekty, które zachowują się jak typy wartości (wykazując strukturalną lub innymi słowy równość opartą na wartości).
Odnośnie twojego kodu w OP,
public data class Person { string FirstName; string LastName; }
można przepisać jako
public record Person(string FirstName, string LastName);
Powyższa składnia używa podstawowego konstruktora . Jeśli chcesz pominąć główny konstruktor, możesz również zadeklarować rekordy jako
public record Person
{
public string FirstName { get; init; }
public string LastName { get; init; }
}
W obu przypadkach Właściwości, FirstName i LastName można przypisać tylko podczas inicjalizacji (za pośrednictwem konstruktora lub inicjatorów obiektów), a nie później.