İfade gövdeli üyeler (C# programlama kılavuzu)
İfade gövdesi tanımları, bir üyenin uygulamasını kısa ve okunabilir bir biçimde sağlamanıza olanak sağlar. Yöntem veya özellik gibi desteklenen herhangi bir üyenin mantığı tek bir ifadeden oluştuğunda ifade gövdesi tanımını kullanabilirsiniz. İfade gövdesi tanımı aşağıdaki genel söz dizimine sahiptir:
member => expression;
burada ifadesi geçerli bir ifadedir.
İfade gövdesi tanımları aşağıdaki tür üyeleriyle kullanılabilir:
Yöntemler
İfade gövdeli bir yöntem, türü yöntemin dönüş türüyle eşleşen bir değer döndüren veya döndüren void
yöntemler için bazı işlemleri gerçekleştiren tek bir ifadeden oluşur. Örneğin, yöntemini geçersiz kılan ToString türler genellikle geçerli nesnenin dize gösterimini döndüren tek bir ifade içerir.
Aşağıdaki örnek, Person
bir ifade gövdesi tanımıyla yöntemini geçersiz kılan ToString bir sınıf tanımlar. Ayrıca konsolda bir DisplayName
ad görüntüleyen bir yöntem tanımlar. anahtar return
sözcüğü ifade gövdesi tanımında ToString
kullanılmaz.
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();
}
}
Daha fazla bilgi için bkz . Yöntemler (C# Programlama Kılavuzu).
Salt okunur özellikler
Salt okunur bir özellik uygulamak için ifade gövdesi tanımını kullanabilirsiniz. Bunu yapmak için aşağıdaki söz dizimini kullanın:
PropertyType PropertyName => expression;
Aşağıdaki örnek, salt okunur Name
özelliği özel locationName
alanın değerini döndüren bir ifade gövdesi tanımı olarak uygulanan bir Location
sınıfı tanımlar:
public class Location
{
private string locationName;
public Location(string name)
{
locationName = name;
}
public string Name => locationName;
}
Özellikler hakkında daha fazla bilgi için bkz . Özellikler (C# Programlama Kılavuzu).
Properties
Özellik get
ve set
erişimcileri uygulamak için ifade gövdesi tanımlarını kullanabilirsiniz. Aşağıdaki örnek bunun nasıl yapılacağını gösterir:
public class Location
{
private string locationName;
public Location(string name) => Name = name;
public string Name
{
get => locationName;
set => locationName = value;
}
}
Özellikler hakkında daha fazla bilgi için bkz . Özellikler (C# Programlama Kılavuzu).
Ekinlikler
Benzer şekilde, olay add
ve remove
erişimciler ifade gövdeli olabilir:
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) });
}
}
Olaylar hakkında daha fazla bilgi için bkz . Olaylar (C# Programlama Kılavuzu).
Oluşturucular
Bir oluşturucu için ifade gövdesi tanımı genellikle tek bir atama ifadesini veya oluşturucunun bağımsız değişkenlerini işleyen veya örnek durumunu başlatan bir yöntem çağrısından oluşur.
Aşağıdaki örnek, oluşturucusunun name adlı tek bir dize parametresine sahip olan bir Location
sınıfı tanımlar. İfade gövdesi tanımı bağımsız değişkenini özelliğine Name
atar.
public class Location
{
private string locationName;
public Location(string name) => Name = name;
public string Name
{
get => locationName;
set => locationName = value;
}
}
Daha fazla bilgi için bkz . Oluşturucular (C# Programlama Kılavuzu).
Sonlandırıcılar
Sonlandırıcı için ifade gövdesi tanımı genellikle yönetilmeyen kaynakları serbest bırakan deyimler gibi temizleme deyimleri içerir.
Aşağıdaki örnek, sonlandırıcının çağrıldığını belirtmek için ifade gövdesi tanımını kullanan bir sonlandırıcı tanımlar.
public class Destroyer
{
public override string ToString() => GetType().Name;
~Destroyer() => Console.WriteLine($"The {ToString()} finalizer is executing.");
}
Daha fazla bilgi için bkz . Sonlandırıcılar (C# Programlama Kılavuzu).
Dizin Oluşturucular
Özelliklerde olduğu gibi, dizin oluşturucu get
ve set
erişimci, erişimci bir değer döndüren tek bir ifadeden oluşuyorsa get
veya set
erişimci basit bir atama gerçekleştiriyorsa ifade gövdesi tanımlarından oluşur.
Aşağıdaki örnek, bazı sporların adlarını içeren bir iç String dizi içeren adlı Sports
bir sınıfı tanımlar. Hem dizin oluşturucu get
hem set
de erişimci ifade gövdesi tanımları olarak uygulanır.
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;
}
}
Daha fazla bilgi için bkz . Dizin Oluşturucular (C# Programlama Kılavuzu).