Dela via


Översikt över objektorienterade tekniker 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 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 dess medlemmar är för att koda utanför klassen eller struct. Medlemmar som inte är avsedda för konsumenter utanför klassen eller sammansättningen är dolda för att begränsa risken för kodfel eller skadliga kryphål. Mer information finns i självstudiekursen 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 typer av medlemmar som kan deklareras i en klass, struct eller record.

  • Fält
  • Konstanter
  • Egenskaper
  • Metoder
  • Konstruktörer
  • Evenemang
  • Finalisatorer
  • Indexerare
  • Operatörer
  • 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, så kallad klientkod. Andra metoder och egenskaper kan endast användas i själva klassen eller struct. 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 finalizers.

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 den saknade implementeringen. 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, structs 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.

Allmänna typer

Klasser, structs 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 innehåller. Mer information finns i Generiska objekt.

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, structs och poster kan innehålla statiska medlemmar. Mer information finns i Statiska klasser och statiska klassmedlemmar.

Kapslade typer

En klass, struktur eller posttyp kan nästlas inom en annan klass, struktur eller posttyp. 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 struct-objekt 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. Namngivna datamedlemmar definierar anonyma typer. Mer information finns i Anonyma typer.

Utvidgningsmedlemmar

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 typade lokala variabler

I en klass- eller struct-metod kan du använda implicit inmatning för att instruera kompilatorn att fastställa en variabels typ vid kompileringstiden. Mer information finns i var (C#-referens).

Arkiv

Du kan lägga till record-modifieraren i en klass eller en struktur. Records är typer med inbyggt beteende för värdebaserad likhet. En post (antingen record class eller record struct) innehåller följande egenskaper:

  • 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 är lika i båda posterna för varje fält. Klasser använder referensjämlikhet: två variabler av en klasstyp är lika med om de refererar till samma objekt.
  • Koncis syntax för icke-förstörande mutation. Med ett with uttryck kan du skapa en ny post som är en kopia av en befintlig, men med bestämda egenskapsvärden ändrade.
  • Inbyggd formatering för visning. Metoden ToString skriver ut posttypens namn samt namnen och värdena för publika egenskaper.
  • Stöd för arvshierarkier i recordklasser. Postklasser stöder arv. Inspelningsstrukturer stöder inte arv.

Mer information finns i Register.

Språkspecifikation för C#

Mer information finns i C#-språkspecifikationen. Språkspecifikationen är den slutgiltiga källan för C#-syntax och -användning.