C# Academy · Lektion

Fånga parametrar i medlemmar

Använd primärkonstruktorns parametrar genom hela typen.

Lektion 2 av 413 steg

Fånga parametrar i medlemmar är en gratis lektion i C# Academy på CoddyKit. Detta är lektion 2 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.

Använda parametrar i medlemmar

Styrkan hos primära konstruktorer kommer från att parametrarna används i medlemmar: metoder, egenskaper och fältinitierare. Kompilatorn ordnar lagringen efter behov.

using System;

class Multiplier(int factor) {
    public int Apply(int n) => n * factor;
}

Console.WriteLine(new Multiplier(3).Apply(5)); // 15

Referering jämfört med enbart initiering

Om en parameter bara används i en fält- eller egenskapsinitierare behövs ingen extra lagring. Om den används i en metod refererar kompilatorn den genom att spara den i ett dolt fält.

using System;

class A(int x) {
    public int Stored = x;     // initializer only
}
class B(int x) {
    public int Get() => x;     // captured into a field
}

Console.WriteLine(new A(7).Stored); // 7
Console.WriteLine(new B(9).Get());  // 9

Parametrar är föränderliga

Parametrar i primära konstruktorer fungerar som vanliga parametrar: de kan ändras i instansen om Ni inte behandlar dem som skrivskyddade. Om en parameter ändras ändras det fångade fältet.

using System;

class Toggle(bool on) {
    public void Flip() => on = !on;
    public bool State => on;
}

var t = new Toggle(false);
t.Flip();
Console.WriteLine(t.State); // True

Exponera som skrivskyddade egenskaper

Ett vanligt mönster är att exponera en parameter genom en egenskap som bara har en get-accessor. Det ger ett rent offentligt gränssnitt samtidigt som parametern hålls intern.

using System;

class User(string email) {
    public string Email { get; } = email;
}

Console.WriteLine(new User("a@b.com").Email); // a@b.com

Beräknade egenskaper från parametrar

Parametrar passar naturligt in i beräknade egenskaper med uttryckskropp.

using System;

class Money(decimal amount, string currency) {
    public string Display => amount.ToString("0.00") + " " + currency;
}

Console.WriteLine(new Money(9.5m, "USD").Display); // 9.50 USD

Parametrar i flera metoder

Samma refererade parameter kan delas av flera metoder och fungerar då som ett privat fält som initieras vid konstruktionen.

using System;

class Range2(int lo, int hi) {
    public bool Contains(int n) => n >= lo && n <= hi;
    public int Clamp(int n) => Math.Max(lo, Math.Min(hi, n));
}

var r = new Range2(0, 10);
Console.WriteLine(r.Contains(5)); // True
Console.WriteLine(r.Clamp(15));   // 10

Infångning av referenstyper

Parametrar av referenstyp som fångas in gör att du kan lagra injicerade beroenden och anropa dem från valfri metod.

using System;
using System.Collections.Generic;

class Repo(List<string> store) {
    public void Add(string item) => store.Add(item);
    public int Count => store.Count;
}

var list = new List<string>();
var repo = new Repo(list);
repo.Add("x");
Console.WriteLine(repo.Count); // 1

Undvik oavsiktlig dubbellagring

Om du både tilldelar en parameter till ett fält och använder parametern i metoder kan värdet komma att lagras två gånger. Välj helst ett av tillvägagångssätten för tydlighetens skull.

using System;

class Clean(int x) {
    // expose once via property, reference property in methods
    public int Value { get; } = x;
    public int Doubled() => Value * 2;
}

Console.WriteLine(new Clean(4).Doubled()); // 8

Parametrar i lambdauttryck

Parametrar kan fångas in av lambdauttryck som definieras inuti klassen, precis som fält.

using System;
using System.Collections.Generic;
using System.Linq;

class Filter(int threshold) {
    public IEnumerable<int> KeepAbove(IEnumerable<int> xs) =>
        xs.Where(n => n > threshold);
}

var f = new Filter(3);
Console.WriteLine(string.Join(",", f.KeepAbove(new[]{1,2,3,4,5}))); // 4,5

Omfångets livslängd

En infångad parameter lever lika länge som objektet. Den fungerar i praktiken som instanstillstånd, så anta inte att den återställs mellan metodanrop.

using System;

class Accumulator(int seed) {
    private int total = seed;
    public int Add(int n) { total += n; return total; }
}

var a = new Accumulator(100);
Console.WriteLine(a.Add(1)); // 101
Console.WriteLine(a.Add(1)); // 102

Sätta ihop delarna

Den här tjänsten fångar in två beroenden och använder dem i flera metoder, vilket visar den typiska formen i verkliga tillämpningar.

using System;

class PriceService(decimal taxRate, string currency) {
    public decimal WithTax(decimal net) => net * (1 + taxRate);
    public string Format(decimal v) => v.ToString("0.00") + " " + currency;
}

var s = new PriceService(0.2m, "EUR");
Console.WriteLine(s.Format(s.WithTax(100m))); // 120.00 EUR

Snabbkontroll

Bekräfta hur primära konstruktorparametrar lagras.

Sammanfattning

Du har lärt dig hur primära konstruktorparametrar används i medlemmar.

  • När de används i metoder fångas parametrarna in i dolda fält.
  • När de endast används i initierare behövs ingen extra lagring.
  • Exponera dem via get-only-egenskaper för ett rent gränssnitt.
  • De fungerar som instanstillstånd under objektets hela livslängd.
Gratis att börja

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 ”Fånga parametrar i medlemmar” gratis?

Ja – hela texten till ”Fånga parametrar i medlemmar” 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 ”Fånga parametrar i medlemmar”?

Använd primärkonstruktorns parametrar genom hela 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 2 av 4.

Hur lång tid tar lektionen ”Fånga parametrar i medlemmar”?

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

  1. Primärkonstruktorer i klasser
  2. Fånga parametrar i medlemmar
  3. Primärkonstruktorer med structs
  4. Kombinera med properties och bastyper
← Tillbaka till C# Academy