Öznitelikler (C#)

Öznitelikler meta verileri veya bildirim bilgilerini kodla (derlemeler, türler, yöntemler, özellikler vb.) birleştirmeye yönelik güçlü bir yöntem sağlar. Bir öznitelik bir program varlığıyla ilişkilendirildikten sonra, özniteliği yansıma adlı bir teknik kullanılarak çalışma zamanında sorgu olabilir. Daha fazla bilgi için bkz. Yansıma (C#).

Öznitelikler aşağıdaki özelliklere sahiptir:

  • Öznitelikler, programınıza meta veriler ekler. Meta veriler, bir programda tanımlanan türler hakkında bilgidir. Tüm .NET derlemeleri, derlemede tanımlanan türleri ve tür üyelerini açıklayan belirli bir meta veri kümesi içerir. Gerekli ek bilgileri belirtmek için özel öznitelikler ekebilirsiniz. Daha fazla bilgi için bkz. Özel Öznitelikler Oluşturma (C#).
  • Bütün derlemelere, modüllere veya sınıflar ve özellikler gibi daha küçük program öğelerine bir veya daha fazla öznitelik uygulayabilirsiniz.
  • Öznitelikler, yöntemler ve özelliklerle aynı şekilde bağımsız değişkenleri kabul eder.
  • Programınız kendi meta verilerini veya diğer programlarda yer alan meta verileri yansıma kullanarak inceler. Daha fazla bilgi için bkz. Yansıma Kullanarak Özniteliklere Erişme (C#).

Öznitelikleri kullanma

Öznitelikler neredeyse tüm bildirimlere yer ve hatta belirli bir öznitelik geçerli olduğu bildirim türlerini kısıtlar. C# içinde, geçerli olduğu varlığın bildiriminin üzerine köşeli ayraç ([]) içine öznitelik adını yerleştirerek bir öznitelik belirtirsiniz.

Bu örnekte, özniteliği SerializableAttribute bir sınıfa belirli bir özelliği uygulamak için kullanılır:

[Serializable]
public class SampleClass
{
    // Objects of this type can be serialized.
}

özniteliğine sahip bir DllImportAttribute yöntem aşağıdaki örnekte olduğu gibi bildirildi:

[System.Runtime.InteropServices.DllImport("user32.dll")]
extern static void SampleMethod();

Aşağıdaki örnekte de olduğu gibi bir bildirime birden fazla öznitelik yerleştiril olabilir:

using System.Runtime.InteropServices;
void MethodA([In][Out] ref double x) { }
void MethodB([Out][In] ref double x) { }
void MethodC([In, Out] ref double x) { }

Belirli bir varlık için bazı öznitelikler birden çok kez belirtilebilir. Bu tür çok kullanıcılı bir özniteliğin bir örneği ConditionalAttribute şöyledir:

[Conditional("DEBUG"), Conditional("TEST1")]
void TraceMethod()
{
    // ...
}

Not

Kural gereği, tüm öznitelik adları .NET kitaplıklarında diğer öğelerden ayırt etmek için "Öznitelik" sözcüğüyle sona erer. Ancak, kodda öznitelikleri kullanırken öznitelik soneki belirtmenize gerek yok. Örneğin, [DllImport] ile [DllImportAttribute] eşdeğerdir, DllImportAttribute ancak özniteliğin .NET Sınıf Kitaplığı'nın gerçek adıdır.

Öznitelik parametreleri

Birçok özniteliğin konumsal, adlandırlanmamış veya adlandırılmış olan parametreleri vardır. Konumsal parametreler belirli bir sırada belirtilmelidir ve atlanamaz. Adlandırılmış parametreler isteğe bağlıdır ve herhangi bir sırayla belirtilebilir. Önce konumsal parametreler belirtilir. Örneğin, bu üç öznitelik eşdeğerdir:

[DllImport("user32.dll")]
[DllImport("user32.dll", SetLastError=false, ExactSpelling=false)]
[DllImport("user32.dll", ExactSpelling=false, SetLastError=false)]

İlk parametre olan DLL adı konumsaldır ve her zaman önce gelir; diğerleri olarak adlandırılmıştır. Bu durumda, her iki adlandırılmış parametre de varsayılan olarak false olur, bu nedenle atlanabilirler. Konumsal parametreler, öznitelik oluşturucuslarının parametrelerine karşılık gelir. Adlandırılmış veya isteğe bağlı parametreler özniteliğin özelliklerine veya alanlarına karşılık gelen parametrelerdir. Varsayılan parametre değerleri hakkında bilgi için tek tek özniteliğin belgelerine bakın.

İzin verilen parametre türleri hakkında daha fazla bilgi için C# dil belirtimlerinin Öznitelikler bölümüne bakın

Öznitelik hedefleri

Özniteliğin hedefi, özniteliğin geçerli olduğu varlıktır. Örneğin, bir öznitelik bir sınıfa, belirli bir yönteme veya bütün derlemeye uygulanabilir. Varsayılan olarak, öznitelik onu izleyen öğe için geçerlidir. Ancak özniteliğin bir yönteme mi, parametresine mi yoksa dönüş değerine mi uygulandığını da açıkça tanımlayabilirsiniz.

Öznitelik hedefini açıkça tanımlamak için aşağıdaki söz dizimini kullanın:

[target : attribute-list]

Olası target değerlerin listesi aşağıdaki tabloda gösterilmiştir.

Hedef değer Şunlara uygulanır
assembly Bütün bütün derleme
module Geçerli derleme modülü
field Bir sınıfta veya yapıda alan
event Olay
method Yöntem veya get özellik set erişimcileri
param Yöntem parametreleri veya set özellik erişimci parametreleri
property Özellik
return Bir yöntemin, özellik dizinecinin veya özellik erişimcinin get dönüş değeri
type Yapı, sınıf, arabirim, enum veya temsilci

Otomatik uygulanan bir özellik için oluşturulan destek alanına öznitelik field uygulamak için hedef değeri belirtirsiniz.

Aşağıdaki örnekte, derlemelere ve modüllere özniteliklerin nasıl uygulanacakları gösterir. Daha fazla bilgi için bkz. Ortak Öznitelikler (C#).

using System;
using System.Reflection;
[assembly: AssemblyTitleAttribute("Production assembly 4")]
[module: CLSCompliant(true)]

Aşağıdaki örnekte, C# içinde yöntemlere, yöntem parametrelerine ve yöntem dönüş değerlerine özniteliklerin nasıl uygulanacakları gösterir.

// default: applies to method
[ValidatedContract]
int Method1() { return 0; }

// applies to method
[method: ValidatedContract]
int Method2() { return 0; }

// applies to parameter
int Method3([ValidatedContract] string contract) { return 0; }

// applies to return value
[return: ValidatedContract]
int Method4() { return 0; }

Not

Geçerli olacak şekilde tanımlanan hedeflerden bağımsız olarak, yalnızca dönüş değerlerine uygulanacak şekilde tanımlanmış olsa bile hedef ValidatedContract return ValidatedContract belirtilmelidir. Başka bir deyişle, derleyici belirsiz AttributeUsage öznitelik hedeflerini çözümlemek için bilgileri kullanmaz. Daha fazla bilgi için bkz. AttributeUsage (C#).

Öznitelikler için yaygın kullanımlar

Aşağıdaki listede, kodda özniteliklerin yaygın kullanımlarının birkaçı yer almaktadır:

  • Yöntemin SOAP protokolü WebMethod üzerinden çağrılabilir olması gerektiğini belirtmek için Web hizmetlerde özniteliğini kullanarak yöntemleri işaretleme. Daha fazla bilgi için bkz. WebMethodAttribute.
  • Yerel kodla birlikte çalışmada yöntem parametrelerini sıralamayı açıklama. Daha fazla bilgi için bkz. MarshalAsAttribute.
  • Sınıflar, yöntemler ve arabirimler için COM özelliklerini açıklama.
  • sınıfını kullanarak unmanaged code DllImportAttribute çağrısı.
  • Derlemenizi başlık, sürüm, açıklama veya ticari marka açısından açıklama.
  • Kalıcılık için serileştirmek için bir sınıfın hangi üyelerini açıklama.
  • XML serileştirme için sınıf üyeleri ve XML düğümleri arasında eşlemeyi açıklama.
  • Yöntemler için güvenlik gereksinimlerini açıklama.
  • Güvenliği zorlamak için kullanılan özellikleri belirtme.
  • Kodun kolayca hata ayıklaması için iyileştirmeleri tam zamanında (JIT) derleyicisi tarafından denetleme.
  • Bir yönteme çağıran hakkında bilgi alma.

Daha fazla bilgi için bkz.

Ayrıca bkz.