Özellikler (C# Programlama Kılavuzu)
Özellik, özel bir alanın değerini okumak, yazmak veya hesaplamak için esnek bir mekanizma sağlayan bir üyedir. Özellikler genel veri üyeleri gibi kullanılabilir, ancak erişimci olarak adlandırılan özel yöntemlerdir. Bu özellik verilere kolayca erişilmesine olanak tanır ve yine de yöntemlerin güvenliğini ve esnekliğini yükseltmeye yardımcı olur.
Özelliklere genel bakış
- Özellikler, bir sınıfın uygulama veya doğrulama kodunu gizlerken değerleri alma ve ayarlamanın genel bir yolunu ortaya çıkarmasını sağlar.
- Özellik değerini döndürmek için get özellik erişimcisi kullanılır ve yeni bir değer atamak için bir set özellik erişimcisi kullanılır. Yalnızca nesne oluşturma sırasında yeni bir değer atamak için bir init özellik erişimcisi kullanılır. Bu erişimcilerin farklı erişim düzeyleri olabilir. Daha fazla bilgi için bkz . Erişimci Erişilebilirliğini Kısıtlama.
- value anahtar sözcüğü, veya
init
erişimcisininset
atadığına ilişkin değeri tanımlamak için kullanılır. - Özellikler okuma-yazma (hem bir
get
hem de birset
erişimciye sahipler), salt okunur (erişimcileriget
var ama erişimcileri yokset
) veya salt yazma (erişimcileriset
var ama erişimci yokget
) olabilir. Yalnızca yazma özellikleri nadirdir ve en yaygın olarak hassas verilere erişimi kısıtlamak için kullanılır. - Özel erişimci kodu gerektirmeyen basit özellikler, ifade gövdesi tanımları veya otomatik olarak uygulanan özellikler olarak uygulanabilir.
Yedekleme alanları olan özellikler
Bir özelliği uygulamaya yönelik temel desenlerden biri, özellik değerini ayarlamak ve almak için özel bir yedekleme alanı kullanmayı içerir. Erişimci get
özel alanın değerini döndürür ve set
erişimci özel alana bir değer atamadan önce bazı veri doğrulama işlemleri gerçekleştirebilir. Her iki erişimci de veriler depolanmadan veya döndürülmeden önce bazı dönüştürme veya hesaplamalar gerçekleştirebilir.
Aşağıdaki örnekte bu desen gösterilmektedir. Bu örnekte, TimePeriod
sınıfı bir zaman aralığını temsil eder. Dahili olarak, sınıfı zaman aralığını adlı _seconds
özel bir alanda saniye cinsinden depolar. adlı Hours
bir okuma-yazma özelliği, müşterinin saat cinsinden zaman aralığını belirtmesine olanak tanır. get
Hem hem de set
erişimcileri saat ve saniyeler arasında gerekli dönüştürmeyi gerçekleştirir. Buna ek olarak, set
erişimci verileri doğrular ve saat sayısı geçersizse bir ArgumentOutOfRangeException oluşturur.
public class TimePeriod
{
private double _seconds;
public double Hours
{
get { return _seconds / 3600; }
set
{
if (value < 0 || value > 24)
throw new ArgumentOutOfRangeException(nameof(value),
"The valid range is between 0 and 24.");
_seconds = value * 3600;
}
}
}
Aşağıdaki örnekte gösterildiği gibi değeri almak ve ayarlamak için özelliklere erişebilirsiniz:
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ı
Özellik erişimcileri genellikle yalnızca bir ifadenin sonucunu atayan veya döndüren tek satırlı deyimlerden oluşur. Bu özellikleri ifade gövdeli üyeler olarak uygulayabilirsiniz. İfade gövdesi tanımları, simgesinden =>
ve ardından özelliğine atanacak veya özelliğinden alınacak ifadeden oluşur.
Salt okunur özellikler, erişimciyi get
ifade gövdeli üye olarak uygulayabilir. Bu durumda, erişimci get
anahtar sözcüğü veya return
anahtar sözcük kullanılmaz. Aşağıdaki örnek salt okunur Name
özelliğini ifade gövdeli üye olarak uygular.
public class Person
{
private string _firstName;
private string _lastName;
public Person(string first, string last)
{
_firstName = first;
_lastName = last;
}
public string Name => $"{_firstName} {_lastName}";
}
Hem hem get
de set
erişimci ifade gövdeli üyeler olarak uygulanabilir. Bu durumda ve get
set
anahtar sözcükleri mevcut olmalıdır. Aşağıdaki örnekte her iki erişimci için de ifade gövdesi tanımlarının kullanımı gösterilmektedir. anahtar return
sözcüğü erişimciyle get
birlikte kullanılmaz.
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;
}
}
Otomatik uygulanan özellikler
Bazı durumlarda, özellik get
ve set
erişimciler herhangi bir ek mantık eklemeden yalnızca bir yedekleme alanına değer atar veya bu alandan bir değer alır. Otomatik olarak uygulanan özellikleri kullanarak, C# derleyicisinin sizin için destek alanını saydam bir şekilde sağlamasına olanak tanırken kodunuzu basitleştirebilirsiniz.
Bir özelliğin hem a hem set
de get
(veya get
a ve init
) erişimcisi varsa, her ikisi de otomatik olarak uygulanmalıdır. Hiçbir uygulama sağlamadan ve set
anahtar sözcüklerini kullanarak get
otomatik uygulanan bir özellik tanımlarsınız. Aşağıdaki örnek, ve otomatik olarak uygulanan özellikler dışında Name
Price
öncekini yineler. Örnek ayrıca parametreli oluşturucuyu da kaldırır, böylece SaleItem
nesneler artık parametresiz oluşturucuya ve nesne başlatıcıya yapılan bir çağrıyla başlatılır.
public class SaleItem
{
public string Name
{ get; set; }
public decimal Price
{ get; set; }
}
Otomatik uygulanan özellikler ve set
erişimcileri için get
farklı erişim özellikleri bildirebilir. Genel erişimciyi get
ve özel set
erişimciyi genellikle bildirirsiniz. Erişimci erişilebilirliğini kısıtlama makalesinde daha fazla bilgi edinebilirsiniz.
Gerekli özellikler
C# 11'le başlayarak, istemci kodunu herhangi bir özelliği veya alanı başlatmaya zorlamak için üyeyi ekleyebilirsiniz required
:
public class SaleItem
{
public required string Name
{ get; set; }
public required decimal Price
{ get; set; }
}
oluşturmak SaleItem
için, aşağıdaki kodda Name
gösterildiği gibi nesne başlatıcılarını kullanarak hem ve Price
özelliklerini ayarlamanız gerekir:
var item = new SaleItem { Name = "Shoes", Price = 19.95m };
Console.WriteLine($"{item.Name}: sells for {item.Price:C2}");
İlgili bölümler
- Özellikleri Kullanma
- Arabirim Özellikleri
- Özellikler ve Dizin Oluşturucular Arasında Karşılaştırma
- Erişimci Erişilebilirliğini Kısıtlama
- Otomatik Uygulanan Özellikler
C# Dil Belirtimi
Daha fazla bilgi için bkz. C# Dil Belirtimi'ndeki Özellikler. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin