Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A kifejezéstörzsdefiníciók segítségével tömör, olvasható formában adhat meg egy tag implementációját. A kifejezés törzsdefinícióját akkor használhatja, ha bármely támogatott tag logikája, például egy metódus vagy tulajdonság egyetlen kifejezésből áll. A kifejezéstörzs definíciója a következő általános szintaxist tartalmazza:
member => expression;
ahol a kifejezés érvényes kifejezés.
A kifejezés törzsdefiníciói a következő típustagokkal használhatók:
Metódusok
A kifejezés által testesített metódus egyetlen kifejezésből áll, amely egy olyan értéket ad vissza, amelynek típusa megegyezik a metódus visszatérési típusával, vagy a visszaadott void
metódusok esetében, amelyek valamilyen műveletet hajtanak végre. A metódust felülbíráló ToString típusok például általában egyetlen kifejezést tartalmaznak, amely az aktuális objektum sztringképét adja vissza.
Az alábbi példa egy olyan osztályt Person
határoz meg, amely felülírja a ToString metódust egy kifejezéstörzs-definícióval. Definiál egy metódust DisplayName
is, amely megjelenít egy nevet a konzolon. A return
kulcsszó nem használatos a ToString
kifejezés törzsdefiníciójában.
using System;
namespace ExpressionBodiedMembers;
public class Person
{
public Person(string firstName, string lastName)
{
fname = firstName;
lname = lastName;
}
private string fname;
private string lname;
public override string ToString() => $"{fname} {lname}".Trim();
public void DisplayName() => Console.WriteLine(ToString());
}
class Example
{
static void Main()
{
Person p = new Person("Mandy", "Dejesus");
Console.WriteLine(p);
p.DisplayName();
}
}
További információ: Metódusok (C# programozási útmutató).
Csak olvasható tulajdonságok
A kifejezés törzsdefiníciója használható írásvédett tulajdonság implementálásához. Ehhez használja a következő szintaxist:
PropertyType PropertyName => expression;
Az alábbi példa egy olyan osztályt Location
határoz meg, amelynek írásvédett Name
tulajdonsága kifejezéstörzsdefinícióként van implementálva, amely a magánmező locationName
értékét adja vissza:
public class Location
{
private string locationName;
public Location(string name)
{
locationName = name;
}
public string Name => locationName;
}
A tulajdonságokról további információt a Tulajdonságok (C# programozási útmutató) című témakörben talál.
Tulajdonságok
A kifejezéstörzs-definíciókkal tulajdonságokat get
és set
tartozékokat implementálhat. Az alábbi példa bemutatja, hogyan teheti ezt meg:
public class Location
{
private string locationName;
public Location(string name) => Name = name;
public string Name
{
get => locationName;
set => locationName = value;
}
}
A tulajdonságokról további információt a Tulajdonságok (C# programozási útmutató) című témakörben talál.
esemény
Hasonlóképpen, az esemény add
és remove
a tartozék is kifejezés-testes:
public class ChangedEventArgs : EventArgs
{
public required int NewValue { get; init; }
}
public class ObservableNum(int _value)
{
public event EventHandler<ChangedEventArgs> ChangedGeneric = default!;
public event EventHandler Changed
{
// Note that, while this is syntactically valid, it won't work as expected because it's creating a new delegate object with each call.
add => ChangedGeneric += (sender, args) => value(sender, args);
remove => ChangedGeneric -= (sender, args) => value(sender, args);
}
public int Value
{
get => _value;
set => ChangedGeneric?.Invoke(this, new() { NewValue = (_value = value) });
}
}
Az eseményekről további információt az Események (C# programozási útmutató) című témakörben talál.
Konstruktorok
A konstruktor kifejezéstörzsének definíciója általában egyetlen hozzárendelési kifejezésből vagy metódushívásból áll, amely kezeli a konstruktor argumentumait, vagy inicializálja a példány állapotát.
Az alábbi példa egy osztályt Location
határoz meg, amelynek konstruktorának neve egyetlen sztringparaméterrel rendelkezik. A kifejezés törzsdefiníciója hozzárendeli az argumentumot a Name
tulajdonsághoz.
public class Location
{
private string locationName;
public Location(string name) => Name = name;
public string Name
{
get => locationName;
set => locationName = value;
}
}
További információ: Konstruktorok (C# programozási útmutató).
Döntősök
A véglegesítő kifejezés törzsdefiníciója általában karbantartási utasításokat tartalmaz, például a nem felügyelt erőforrásokat felszabadító utasításokat.
Az alábbi példa egy véglegesítőt határoz meg, amely egy kifejezés törzsdefinícióját használja annak jelzésére, hogy a véglegesítő meghívása megtörtént.
public class Destroyer
{
public override string ToString() => GetType().Name;
~Destroyer() => Console.WriteLine($"The {ToString()} finalizer is executing.");
}
További információ: Finalizers (C# programozási útmutató).
Indexelők
A tulajdonságokhoz hasonlóan az indexelő get
és set
a tartozék kifejezéstörzs-definíciókból áll, ha a get
tartozék egyetlen olyan kifejezésből áll, amely egy értéket ad vissza, vagy a set
tartozék egyszerű hozzárendelést hajt végre.
Az alábbi példa egy olyan osztályt Sports
határoz meg, amely egy belső String tömböt tartalmaz, amely bizonyos sportágak nevét tartalmazza. Az indexelő get
és set
a tartozék kifejezéstörzs-definícióként is implementálva van.
using System;
using System.Collections.Generic;
namespace SportsExample;
public class Sports
{
private string[] types = [ "Baseball", "Basketball", "Football",
"Hockey", "Soccer", "Tennis",
"Volleyball" ];
public string this[int i]
{
get => types[i];
set => types[i] = value;
}
}
További információ: Indexelők (C# programozási útmutató).