Statiska metoder och fält
Definiera medlemmar som tillhör själva typen.
Statiska metoder och fält är en gratis lektion i C# Academy på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för C# Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i C# Academy innehåller totalt 4 lektioner.
Statisk jämfört med instans
En instansmedlem tillhör varje objekt, medan en statisk medlem tillhör själva klassen. Det finns exakt en kopia av en statisk medlem, som delas av alla.
using System;
class Counter
{
public static int Total; // shared
public int Id; // per instance
}
class Program
{
static void Main()
{
Counter.Total = 5;
Console.WriteLine("Shared Total: " + Counter.Total);
}
}Deklarera statiska fält
Ett static-fält nås via klassnamnet, inte via en instans: ClassName.Field.
using System;
class Bank
{
public static decimal InterestRate = 0.05m;
}
class Program
{
static void Main()
{
Console.WriteLine("Rate: " + Bank.InterestRate);
}
}Statiska metoder
En static-metod körs utan en instans. Ni anropar den på klassen. Den kan inte använda instansfält eftersom det inte finns något this.
using System;
class MathUtil
{
public static int Square(int x)
{
return x * x;
}
}
class Program
{
static void Main()
{
Console.WriteLine(MathUtil.Square(7));
}
}Delat tillstånd mellan instanser
Eftersom ett statiskt fält har en enda kopia ser varje instans samma värde. Det är användbart för räknare och delad konfiguration.
using System;
class Robot
{
public static int Count;
public Robot()
{
Count++;
}
}
class Program
{
static void Main()
{
new Robot();
new Robot();
new Robot();
Console.WriteLine("Robots created: " + Robot.Count);
}
}Statiska metoder kan inte använda instansdata
En statisk metod har inget this, så den kan bara använda parametrar, lokala variabler och andra statiska medlemmar.
using System;
class Calculator
{
public static int Add(int a, int b) => a + b;
public static int Multiply(int a, int b) => a * b;
}
class Program
{
static void Main()
{
Console.WriteLine(Calculator.Add(2, 3));
Console.WriteLine(Calculator.Multiply(4, 5));
}
}Blanda statiskt och instansbaserat
En klass kan innehålla båda typerna. Instansmetoder kan läsa statiska medlemmar, men statiska metoder kan inte läsa instansmedlemmar.
using System;
class Account
{
public static decimal Fee = 2m;
public decimal Balance;
public decimal NetBalance()
{
return Balance - Fee; // instance method can read static
}
}
class Program
{
static void Main()
{
var a = new Account { Balance = 100m };
Console.WriteLine("Net: " + a.NetBalance());
}
}Mönstret med statisk räknare
Att tilldela varje nytt objekt ett id från en statisk räknare är ett klassiskt användningsområde för statiska fält.
using System;
class Ticket
{
private static int _next = 1;
public int Number;
public Ticket()
{
Number = _next++;
}
}
class Program
{
static void Main()
{
Console.WriteLine(new Ticket().Number);
Console.WriteLine(new Ticket().Number);
Console.WriteLine(new Ticket().Number);
}
}Statiska hjälpmetoder
Statiska metoder passar utmärkt för tillståndslösa operationer som bara beror på sina indata, till exempel formaterare och konverterare.
using System;
class Format
{
public static string Money(decimal amount)
{
return "$" + amount.ToString("0.00");
}
}
class Program
{
static void Main()
{
Console.WriteLine(Format.Money(12.5m));
}
}Anropa statiskt från statiskt
Statiska metoder kan fritt anropa andra statiska metoder i samma klass utan någon instans.
using System;
class Geometry
{
public static double CircleArea(double r) => Math.PI * Square(r);
private static double Square(double x) => x * x;
}
class Program
{
static void Main()
{
Console.WriteLine(Geometry.CircleArea(2).ToString("0.00"));
}
}Statiska fält består
Ett statiskt fält behåller sitt värde under hela programmets livslängd, inte bara för ett enda objekt. Använd detta för cachelagring eller löpande totaler.
using System;
class Logger
{
public static int MessageCount;
public static void Log(string msg)
{
MessageCount++;
Console.WriteLine("[" + MessageCount + "] " + msg);
}
}
class Program
{
static void Main()
{
Logger.Log("start");
Logger.Log("working");
Logger.Log("done");
}
}Sätta ihop allt
Statiska medlemmar representerar klassövergripande koncept: delade hastigheter, räknare och tillståndslösa hjälpmetoder, medan instansmedlemmar innehåller data för varje objekt.
using System;
class Order
{
public static decimal TaxRate = 0.10m;
public decimal Subtotal;
public decimal Total() => Subtotal + Subtotal * TaxRate;
}
class Program
{
static void Main()
{
var o = new Order { Subtotal = 200m };
Console.WriteLine("Total: " + o.Total());
}
}Snabbkontroll
Testa er förståelse av statiska medlemmar.
Sammanfattning
Statiska medlemmar tillhör klassen och har en enda delad kopia, medan instansmedlemmar tillhör varje objekt. Statiska metoder har inget this och kan inte komma åt instansdata, men instanskod kan läsa statiska medlemmar. Använd statiska medlemmar för räknare, delad konfiguration och tillståndslösa hjälpmetoder.
using System;
class Demo
{
public static int Shared;
public int Own;
public static void Bump() => Shared++;
}
class Program
{
static void Main()
{
Demo.Bump();
Demo.Bump();
Console.WriteLine(Demo.Shared);
}
}Lär dig C# med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 93
- Lektioner
- 346
Vanliga frågor
Är lektionen ”Statiska metoder och fält” gratis?
Ja – hela texten till ”Statiska metoder och fält” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i C# Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i C# Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Statiska metoder och fält”?
Definiera medlemmar som tillhör själva typen. Ni övar på C# Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig C# Academy?
Du behöver inga förkunskaper. Utbildningen i C# Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.
Hur lång tid tar lektionen ”Statiska metoder och fält”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här C# Academy-lektionen?
Ja. Varje C# Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Statiska metoder och fält
- Statiska klasser för verktygsfunktioner
- Konstanter och readonly-fält
- Statisk kontra instansbaserad design