Fånga parametrar i medlemmar
Använd primärkonstruktorns parametrar genom hela typen.
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)); // 15Referering 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()); // 9Parametrar ä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); // TrueExponera 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.comBerä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 USDParametrar 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)); // 10Infå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); // 1Undvik 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()); // 8Parametrar 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,5Omfå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)); // 102Sä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 EURSnabbkontroll
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.
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
- Primärkonstruktorer i klasser
- Fånga parametrar i medlemmar
- Primärkonstruktorer med structs
- Kombinera med properties och bastyper