Ö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üğü, erişimci tarafından atanan değeri tanımlamak için kullanılır set .The value keyword is used to define the value being assigned by the set accessor.

  • Özellikler okuma-yazma (hem a get hem de set erişimciye sahiptir), salt okunurdur (bir erişimcisi vardır ancak erişimci yoktur get set ) ya da salt yazılır (bir set erişimcisi vardır ancak get erişimci yok) olabilir.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. getErişimci özel alanın değerini döndürür ve set özel alana bir değer atamadan önce 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ı, zaman aralığını saniye cinsinden adlı özel bir alana depolar _seconds .Internally, the class stores the time interval in seconds in a private field named _seconds. Adlı bir okuma-yazma özelliği Hours , 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üşümü gerçekleştirir.Both the get and the set accessors perform the necessary conversion between hours and seconds. Ayrıca, set erişimci verileri doğrular ve ArgumentOutOfRangeException saat sayısı geçersizse bir 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ün önüne atanacak veya özelliğe alma ifadesi tarafından izlenen ifadeden oluşur.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şimciyi ifade 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 kelimesi ne de return anahtar sözcük kullanılmaz.In this case, neither the get accessor keyword nor the return keyword is used. Aşağıdaki örnek, salt okunurdur Name özelliği bir 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

C# 7,0 ' den itibaren, 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üklerin mevcut olması gerekir.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. returnAnahtar sözcüğünün erişimciyle kullanılmadığını unutmayın get .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şimciler, ek bir mantık dahil etmeden bir destek alanından bir değer atar veya 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# derleyicisinin sizin için yedekleme alanını saydam bir şekilde sağlamasına karşın 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 a hem de get erişimcisi varsa set , her ikisinin de otomatik olarak uygulanması gerekir.If a property has both a get and a set accessor, both must be auto-implemented. get set Herhangi bir uygulama sağlamadan ve 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 ' nin otomatik olarak uygulanan özellikler olması dışında, önceki birini yinelenir Price .The following example repeats the previous one, except that Name and Price are auto-implemented properties. Ayrıca, SaleItem nesnelerin parametresiz oluşturucuya ve bir nesne başlatıcısınaçağrısıyla başlatılmış olması için 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