Özellikler (C# Programlama Kılavuzu)Properties (C# Programming Guide)

Bir özellik, özel bir alanın değerini okumak, yazmak veya hesaplamak için esnek bir mekanizma sağlayan bir üyesidir.A property is a member that provides a flexible mechanism to read, write, or compute the value of a private field. Özellikler, ortak veri üyeleri gibi kullanılabilir, ancak aslında erişimcilerolarak adlandırılan özel yöntemlerdir.Properties can be used as if they are public data members, but they are actually special methods called accessors. Bu, verilere kolayca erişilmesine olanak sağlar ve yöntemlerin güvenliğini ve esnekliğini yükseltmeye devam eder.This enables data to be accessed easily and still helps promote the safety and flexibility of methods.

Özelliklere genel bakışProperties overview

  • Özellikler, uygulama veya doğrulama kodunu gizlerken, değerleri almak ve ayarlamak için bir sınıfın ortak bir yöntemini kullanıma sunar.Properties enable a class to expose a public way of getting and setting values, while hiding implementation or verification code.

  • Get Property erişimcisi, özellik değerini döndürmek için kullanılır ve yeni bir değer atamak için bir set özellik erişimcisi kullanılır.A get property accessor is used to return the property value, and a set property accessor is used to assign a new value. Bu erişimciler farklı erişim düzeylerine sahip olabilir.These accessors can have different access levels. Daha fazla bilgi için bkz. erişimci erişilebilirliğini kısıtlama.For more information, see Restricting Accessor Accessibility.

  • Value anahtar sözcüğü, set erişimcisi tarafından atanan değeri tanımlamak için kullanılır.The value keyword is used to define the value being assigned by the set accessor.

  • Özellikler , salt yazılır (bir get ve set erişimcisine sahiptir), salt okunurdur (bir get erişimcisi vardır ancak set erişimcisi yoktur) ya da salt yazılır (bir set erişimcisi vardır ancak get erişimcisi yoktur).Properties can be read-write (they have both a get and a set accessor), read-only (they have a get accessor but no set accessor), or write-only (they have a set accessor, but no get accessor). Salt yazılır özellikler nadir ve hassas verilere erişimi kısıtlamak için en yaygın olarak kullanılır.Write-only properties are rare and are most commonly used to restrict access to sensitive data.

  • Özel erişimci kodu gerektirmeyen basit özellikler, ifade gövde tanımları ya da Otomatik uygulanan özelliklerolarak uygulanabilir.Simple properties that require no custom accessor code can be implemented either as expression body definitions or as auto-implemented properties.

Yedekleme alanları olan özelliklerProperties with backing fields

Özelliği uygulamak için bir temel model, özellik değerini ayarlamak ve almak için özel bir yedekleme alanı kullanmayı içerir.One basic pattern for implementing a property involves using a private backing field for setting and retrieving the property value. get erişimci özel alanın değerini döndürür ve özel alana bir değer atamadan önce set erişimci bazı veri doğrulaması gerçekleştirebilir.The get accessor returns the value of the private field, and the set accessor may perform some data validation before assigning a value to the private field. Her iki erişimci de verilerin depolanmadan veya döndürülmeden önce veri üzerinde bazı dönüştürme veya hesaplama işlemleri yapabilir.Both accessors may also perform some conversion or computation on the data before it is stored or returned.

Aşağıdaki örnekte bu desenler gösterilmektedir.The following example illustrates this pattern. Bu örnekte, TimePeriod sınıfı bir zaman aralığını temsil eder.In this example, the TimePeriod class represents an interval of time. Dahili olarak, sınıf, _secondsadlı bir özel alanda zaman aralığını saniye cinsinden depolar.Internally, the class stores the time interval in seconds in a private field named _seconds. Hours adlı bir okuma-yazma özelliği, müşterinin saat cinsinden zaman aralığını belirtmesini sağlar.A read-write property named Hours allows the customer to specify the time interval in hours. Hem get hem de set erişimcileri, saat ve saniyeler arasında gerekli dönüştürme yapar.Both the get and the set accessors perform the necessary conversion between hours and seconds. Ayrıca, set erişimcisi verileri doğrular ve saat sayısı geçersizse bir ArgumentOutOfRangeException oluşturur.In addition, the set accessor validates the data and throws an ArgumentOutOfRangeException if the number of hours is invalid.

using System;

class TimePeriod
{
   private double _seconds;

   public double Hours
   {
       get { return _seconds / 3600; }
       set { 
          if (value < 0 || value > 24)
             throw new ArgumentOutOfRangeException(
                   $"{nameof(value)} must be between 0 and 24.");

          _seconds = value * 3600; 
       }
   }
}

class Program
{
   static void Main()
   {
       TimePeriod t = new TimePeriod();
       // The property assignment causes the 'set' accessor to be called.
       t.Hours = 24;

       // Retrieving the property causes the 'get' accessor to be called.
       Console.WriteLine($"Time in hours: {t.Hours}");
   }
}
// The example displays the following output:
//    Time in hours: 24

İfade gövdesi tanımlarıExpression body definitions

Özellik erişimcileri genellikle yalnızca bir ifadenin sonucunu atayan veya döndüren tek satırlık deyimlerden oluşur.Property accessors often consist of single-line statements that just assign or return the result of an expression. Bu özellikleri ifade Bodied Üyeler olarak uygulayabilirsiniz.You can implement these properties as expression-bodied members. İfade gövdesi tanımları => sembolünden ve sonra, özelliğe atanacak veya bu kümeden alınacak olan ifadenin yer aldığı bir yer içerir.Expression body definitions consist of the => symbol followed by the expression to assign to or retrieve from the property.

C# 6 ' dan itibaren, salt okuma özellikleri get erişimcisini ifade eden bir üye olarak uygulayabilir.Starting with C# 6, read-only properties can implement the get accessor as an expression-bodied member. Bu durumda, get erişimci anahtar sözcüğünün ne de return anahtar sözcüğü kullanılmaz.In this case, neither the get accessor keyword nor the return keyword is used. Aşağıdaki örnek, salt okunurdur Name özelliğini ifade-Bodied üyesi olarak uygular.The following example implements the read-only Name property as an expression-bodied member.

using System;

public class Person
{
   private string _firstName;
   private string _lastName;
   
   public Person(string first, string last)
   {
      _firstName = first;
      _lastName = last;
   }

   public string Name => $"{_firstName} {_lastName}";   
}

public class Example
{
   public static void Main()
   {
      var person = new Person("Magnus", "Hedlund");
      Console.WriteLine(person.Name);
   }
}
// The example displays the following output:
//      Magnus Hedlund

7,0 ile C# başlayarak, hem get hem de set erişimcisi ifade Bodied Üyeler olarak uygulanabilir.Starting with C# 7.0, both the get and the set accessor can be implemented as expression-bodied members. Bu durumda get ve set anahtar sözcükleri mevcut olmalıdır.In this case, the get and set keywords must be present. Aşağıdaki örnek her iki erişimci için ifade gövde tanımlarının kullanımını gösterir.The following example illustrates the use of expression body definitions for both accessors. return anahtar sözcüğünün get erişimcisi ile kullanılmadığını unutmayın.Note that the return keyword is not used with the get accessor.

using System;

public class SaleItem
{
   string _name;
   decimal _cost;
   
   public SaleItem(string name, decimal cost)
   {
      _name = name;
      _cost = cost;
   }

   public string Name 
   {
      get => _name;
      set => _name = value;
   }

   public decimal Price
   {
      get => _cost;
      set => _cost = value; 
   }
}

class Program
{
   static void Main(string[] args)
   {
      var item = new SaleItem("Shoes", 19.95m);
      Console.WriteLine($"{item.Name}: sells for {item.Price:C2}");
   }
}
// The example displays output like the following:
//       Shoes: sells for $19.95



Otomatik uygulanan özelliklerAuto-implemented properties

Bazı durumlarda, özellik get ve set erişimcileri, ek bir mantık dahil etmeden bir yalnızca bir değer atayabilir veya bir yedekleme alanından bir değer alır.In some cases, property get and set accessors just assign a value to or retrieve a value from a backing field without including any additional logic. Otomatik uygulanan özellikleri kullanarak, C# derleyicinin sizin için bir yedekleme alanı sunarak kodunuzu saydam bir şekilde sağlamasına gerek kalmadan kodunuzu basitleştirebilirsiniz.By using auto-implemented properties, you can simplify your code while having the C# compiler transparently provide the backing field for you.

Bir özelliğin hem get hem de bir set erişimcisi varsa, her ikisinin de otomatik olarak uygulanması gerekir.If a property has both a get and a set accessor, both must be auto-implemented. Herhangi bir uygulama sağlamadan get ve set anahtar sözcüklerini kullanarak otomatik uygulanan bir özellik tanımlarsınız.You define an auto-implemented property by using the get and set keywords without providing any implementation. Aşağıdaki örnek, Name ve Price otomatik olarak uygulanan özellikler dışında, önceki bir şekilde yinelenir.The following example repeats the previous one, except that Name and Price are auto-implemented properties. Örneğin, SaleItem nesnelerinin parametresiz oluşturucuya ve bir nesne başlatıcısınaçağrısıyla başlatılmış olması için, aynı zamanda parametreli oluşturucuyu de kaldırdığına unutmayın.Note that the example also removes the parameterized constructor, so that SaleItem objects are now initialized with a call to the parameterless constructor and an object initializer.

using System;

public class SaleItem
{
   public string Name 
   { get; set; }

   public decimal Price
   { get; set; }
}

class Program
{
   static void Main(string[] args)
   {
      var item = new SaleItem{ Name = "Shoes", Price = 19.95m };
      Console.WriteLine($"{item.Name}: sells for {item.Price:C2}");
   }
}
// The example displays output like the following:
//       Shoes: sells for $19.95



C# Dil BelirtimiC# Language Specification

Daha fazla bilgi için bkz. C# dil belirtiminde Özellikler .For more information, see Properties in the C# Language Specification. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.The language specification is the definitive source for C# syntax and usage.

Ayrıca bkz.See also