Attributeler hedeflenen class lar ve/veya class üyeleri için (field,type,method,property,...) ek bilgi sağlayabileceğiniz ve düzenleyici rol üstlenen etiketlerdir. Etki ettikleri nesnelerin anlamlarını ve davranışlarını belirlerler. Attributeler .NET assembly si içinde metadata olarak saklanmaktadırlar. Bu yüzden tasarım ve/veya çalışma anında ulaşılabilir durumdadırlar. Attribute ler .NET platformunda ,çoğu arka planda iş görsede, önemli bir yer işgal ederler. Attribute lerin nasıl kullanıldığını görmek için bir örnek verelim.
Public Function Sayac(strURL As String) As Integer
Bu yapı web servisleriyle uğraşanlara çok tanıdık gelecektir. İlk satırdaki <> arasındaki ifadeye dikkat edelim. İşte size sık kullanılan bir attribute! System.Web.Services namespaceinden gelen WebMethod attributeü. O zaman hemen iki kural çıkaralım.
*Attribute ler <> işaretleri arasında belirtilirler.
*Attribute ler gökten zembille inen etiketler değil, belirli sınıflardır. Aslında her attribute System.Attribute sınıfından türetilmiştir.
Örneğimize geri dönelim. Normal şartlar altında web servisleri geliştirirken; bir sınıfın public metotları, o sınıfın örnekleri tarafından yerel olarak çağrılabilirler. Web servisinin dışa açık bir parçası olarak kullanılamazlar. Ama WebMethod attributeü bu fonksiyonun dışa yönelik bir fonksiyon olduğunu ve internet üzerinden erişebileceğini belirtir. Dikkat; attribute, fonksiyonun davranışını belirledi. Yazının başındaki cümleyi tekrarlayalım; attributeler hedefledikleri üyeler için düzenleyici rol üstlenen etiketlerdir.
Yine örneğimizde attribute Description adında bir propertye sahip. Burada da iki şeyin altını çizelim;
*Atributeler çeşitli propertylere sahip olabilirler.
*Atribute lerin sözdizimlerinde bazı küçük farklılıklar vardır. Örneğin atama yapmak için := sembolleri kullanılır.
İyi güzel de peki bu attributeler neden .NET platformunda önemlidirler? Ya da neden dil ile bütünleştirilmeden kullanılıyorlar? Attributelerin işlevleri pekala alışık olduğumuz komutlarla gerçekleştirilemez miydi?
Aslında bu sorulara cevap olacak temel bilgi yine yazının başında; attributeler, derlenmiş kod yerine, assembly içinde metadata olarak saklanırlar.
Böylelikle attributeler tasarım aşamasında (örneğin Visual Studio .NET kullanılırken) , derlenirken (derlenme esnasında varsayılan derleme ayarlarının değiştirilmesinde) ve çalışma anında (CLR tarafından kodun varsayılan icra edilme mekanizmasının değiştirilmesinde) rol alabilirler.
Visual Studio .NET de kendi içinde attibuteleri kullanır. Visual Studio .NET de kontroller, tasarım anında, çalışma anından farklı davranışlar sergilemektedir. Örneğin bir buttona tasarım anında tıklayınca önceden belirlenmiş varsayılan olay (button için click() olayı) için yordam oluşturur. Fakat aynı butona çalışma anında tıklayınca altındaki kod icra edilir. Arkada bu işi gören aslında
Kullanım özellikleri
-Bir üyeye birden fazla attrbiute aynı anda, virgülle ayrılarak etki ettirilebilir.
-Yaygın kullanımda attribute isminden sonra gelen "attribute" eki düşürülür.
Son olarak bir küçük bir uygulamada attributelerin nasıl kullanıldığını görelim;
Bu uygulamamızda stringlerle çalışırken karşılaşılan bir problemi
Uygulama için yeni bir windows application oluşturun. Formun üstüne bir button koyduktan sonra şu kodları ekleyin:
Structure BenimTipim
Public OnEk As String
Public BenimString As String
Public SonEk As String
End Structure
Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click
Dim Kayit As BenimTipim
FileOpen(1, "c:\TESTFILE.TXT", _
OpenMode.Binary)
Kayit.OnEk = "X"
Kayit.BenimString = "AAAAA"
Kayit.SonEk = "X"
FilePut(1, Kayit)
FileClose(1)
End Sub
Uygulamayı çalıştırdığımızda beklediğimiz sonuca ulaşamayız. Bu sorunu aşağıdaki değişikliği yaparak çözebiliriz.
Structure BenimTipim
End Structure
Hiç yorum yok:
Yorum Gönder