İ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 voidyö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).

Ayrıca bkz.