klass (C#-referens)
Klasser deklareras med nyckelordet class
, enligt följande exempel:
class TestClass
{
// Methods, properties, fields, events, delegates
// and nested classes go here.
}
Kommentarer
Endast enstaka arv tillåts i C#. Med andra ord kan en klass ärva implementering endast från en basklass. En klass kan dock implementera mer än ett gränssnitt. I följande tabell visas exempel på implementering av klassarv och gränssnitt:
Arv | Exempel |
---|---|
Ingen | class ClassA { } |
Enstaka | class DerivedClass : BaseClass { } |
Ingen, implementerar två gränssnitt | class ImplClass : IFace1, IFace2 { } |
Enkel, implementerar ett gränssnitt | class ImplDerivedClass : BaseClass, IFace1 { } |
Klasser som du deklarerar direkt inom ett namnområde, som inte är kapslade i andra klasser, kan vara antingen offentliga eller interna. Klasser är internal
som standard.
Klassmedlemmar, inklusive kapslade klasser, kan vara offentliga, skyddade interna, skyddade, interna, privata eller privata skyddade. Medlemmar är private
som standard.
Mer information finns i Åtkomstmodifierare.
Du kan deklarera generiska klasser som har typparametrar. Mer information finns i Allmänna klasser.
En klass kan innehålla deklarationer av följande medlemmar:
Exempel
I följande exempel visas hur du deklarerar klassfält, konstruktorer och metoder. Den visar också objektinstansiering och utskrift av instansdata. I det här exemplet deklareras två klasser. Den första klassen, Child
, innehåller två privata fält (name
och age
), två offentliga konstruktorer och en offentlig metod. Den andra klassen, StringTest
, används för att innehålla Main
.
class Child
{
private int age;
private string name;
// Default constructor:
public Child()
{
name = "N/A";
}
// Constructor:
public Child(string name, int age)
{
this.name = name;
this.age = age;
}
// Printing method:
public void PrintChild()
{
Console.WriteLine("{0}, {1} years old.", name, age);
}
}
class StringTest
{
static void Main()
{
// Create objects by using the new operator:
Child child1 = new Child("Craig", 11);
Child child2 = new Child("Sally", 10);
// Create an object using the default constructor:
Child child3 = new Child();
// Display results:
Console.Write("Child #1: ");
child1.PrintChild();
Console.Write("Child #2: ");
child2.PrintChild();
Console.Write("Child #3: ");
child3.PrintChild();
}
}
/* Output:
Child #1: Craig, 11 years old.
Child #2: Sally, 10 years old.
Child #3: N/A, 0 years old.
*/
Kommentarer
Observera att de privata fälten (name
och age
) i föregående exempel endast kan nås via klassens offentliga metod Child
. Du kan till exempel inte skriva ut det underordnade namnet från Main
metoden med hjälp av en instruktion som den här:
Console.Write(child1.name); // Error
Det skulle bara vara möjligt att komma åt privata medlemmar i Child
från Main
om Main
de var medlemmar i klassen.
Typer som deklareras i en klass utan en åtkomstmodifierare är standardvärdet private
, så datamedlemmarna i det här exemplet skulle fortfarande vara private
om nyckelordet togs bort.
Observera slutligen att för objektet som skapades med hjälp av den parameterlösa konstruktorn (child3
) age
initierades fältet till noll som standard.
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.