Översikt över klasser, strukturer och poster i C #
I C# är definitionen av en typ – en klass, struct eller post – som en skiss som anger vad typen kan göra. Ett objekt är i princip ett minnesblock som har allokerats och konfigurerats enligt skissen. Den här artikeln innehåller en översikt över dessa skisser och deras funktioner. I nästa artikel i den här serien introduceras objekt.
Inkapsling
Inkapsling kallas ibland för den första pelaren eller principen för objektorienterad programmering. En klass eller struct kan ange hur tillgänglig var och en av medlemmarna är för att koda utanför klassen eller structen. Metoder och variabler som inte är avsedda att användas utanför klassen eller sammansättningen kan döljas för att begränsa risken för kodningsfel eller skadliga kryphål. Mer information finns i självstudien Om objektorienterad programmering .
Medlemmar
Medlemmarna i en typ innehåller alla metoder, fält, konstanter, egenskaper och händelser. I C# finns det inga globala variabler eller metoder som det finns på vissa andra språk. Även ett programs startpunkt, Main
metoden, måste deklareras inom en klass eller struct (implicit när du använder toppnivåinstruktioner).
Följande lista innehåller alla olika typer av medlemmar som kan deklareras i en klass, struct eller post.
- Fält
- Konstanter
- Egenskaper
- Metoder
- Konstruktorer
- Händelser
- Slutförare
- Indexerare
- Operatorer
- Kapslade typer
Mer information finns i Medlemmar.
Tillgänglighet
Vissa metoder och egenskaper är avsedda att anropas eller nås från kod utanför en klass eller struct, som kallas klientkod. Andra metoder och egenskaper kan bara användas i klassen eller själva structen. Det är viktigt att begränsa kodens tillgänglighet så att endast den avsedda klientkoden kan nå den. Du anger hur tillgängliga dina typer och deras medlemmar är för klientkod med hjälp av följande åtkomstmodifierare:
Standardtillgängligheten är private
.
Arv
Klasser (men inte structs) stöder begreppet arv. En klass som härleds från en annan klass, kallad basklassen, innehåller automatiskt alla offentliga, skyddade och interna medlemmar i basklassen förutom dess konstruktorer och slutförare.
Klasser kan deklareras som abstrakta, vilket innebär att en eller flera av deras metoder inte har någon implementering. Även om abstrakta klasser inte kan instansieras direkt kan de fungera som basklasser för andra klasser som tillhandahåller implementeringen som saknas. Klasser kan också deklareras som förseglade för att förhindra att andra klasser ärver från dem.
Mer information finns i Arv och Polymorfism.
Gränssnitt
Klasser, strukturer och poster kan implementera flera gränssnitt. Att implementera från ett gränssnitt innebär att typen implementerar alla metoder som definierats i gränssnittet. Mer information finns i Gränssnitt.
Generiska typer
Klasser, strukturer och poster kan definieras med en eller flera typparametrar. Klientkoden tillhandahåller typen när den skapar en instans av typen . Klassen List<T> i System.Collections.Generic namnområdet definieras till exempel med en typparameter. Klientkoden skapar en instans av en List<string>
eller List<int>
för att ange vilken typ listan ska innehålla. Mer information finns i Allmänt.
Statiska typer
Klasser (men inte structs eller poster) kan deklareras som static
. En statisk klass kan bara innehålla statiska medlemmar och kan inte instansieras med nyckelordet new
. En kopia av klassen läses in i minnet när programmet läses in och dess medlemmar nås via klassnamnet. Klasser, strukturer och poster kan innehålla statiska medlemmar. Mer information finns i Statiska klasser och statiska klassmedlemmar.
Kapslade typer
En klass, struct eller post kan kapslas i en annan klass, struct eller post. Mer information finns i Kapslade typer.
Partiella typer
Du kan definiera en del av en klass, struct eller metod i en kodfil och en annan del i en separat kodfil. Mer information finns i Partiella klasser och metoder.
Objektinitierare
Du kan instansiera och initiera klass- eller structobjekt och samlingar av objekt genom att tilldela värden till dess egenskaper. Mer information finns i Initiera objekt med hjälp av en objektinitierare.
Anonyma typer
I situationer där det inte är praktiskt eller nödvändigt att skapa en namngiven klass använder du anonyma typer. Anonyma typer definieras av deras namngivna datamedlemmar. Mer information finns i Anonyma typer.
Tilläggsmetoder
Du kan "utöka" en klass utan att skapa en härledd klass genom att skapa en separat typ. Den typen innehåller metoder som kan anropas som om de tillhörde den ursprungliga typen. Mer information finns i Tilläggsmetoder).
Implicit typifierade lokala variabler
Inom en klass- eller struct-metod kan du använda implicit inmatning för att instruera kompilatorn att fastställa en variabels typ vid kompileringstillfället. Mer information finns i var (C#-referens).
Poster
C# 9 introducerar record
typen, en referenstyp som du kan skapa i stället för en klass eller en struct. Poster är klasser med inbyggt beteende för att kapsla in data i oföränderliga typer. C# 10 introducerar record struct
värdetypen. En post (antingen record class
eller record struct
) innehåller följande funktioner:
- Koncis syntax för att skapa en referenstyp med oföränderliga egenskaper.
- Värdejämlikhet. Två variabler av en posttyp är lika om de har samma typ, och om värdena i båda posterna är lika för varje fält. Klasser använder referensjämlikhet: två variabler av en klasstyp är lika om de refererar till samma objekt.
- Koncis syntax för icke-exstruktiv mutation.
Med ett
with
uttryck kan du skapa en ny postinstans som är en kopia av en befintlig instans men med angivna egenskapsvärden ändrade. - Inbyggd formatering för visning.
Metoden
ToString
skriver ut posttypens namn och namn och värden för offentliga egenskaper. - Stöd för arvshierarkier i postklasser. Postklasser stöder arv. Poststrukturer stöder inte arv.
Mer information finns i Poster.
C#-språkspecifikation
Mer information finns i C#-språkspecifikationen. Språkspecifikationen är den slutgiltiga källan för C#-syntax och -användning.