C# Bazı az bilinen özellikler
Bir developer için araştırmak kaçınılmazdır. “ne, neden, nasıl …” sorularını sormak asli meziyetlerinden olmalıdır. Ben de ara sıra farklı şeyler öğrenmek amacıyla interneti kurcalarken, yabancı kaynaklarda sıkça C# ile ilgili az bilinenlerin derlendiği yazılar ile karşılaştım. Çoğunlukla aynı döngüde sıkıştığımız için gözlerden kaçan bir çok nokta olabileceğini ve bu tarz derlenmiş bir çalışmanın işine yarayabilecek insanlar olduğunu düşündüm.Bu aşamadada kendimce bu tarz bir paylaşıma imza atmak istedim. Devamı gelirmi bilmiyorum, ancak bir derleme ile başlamak iyi olur sanırım.
- ObsoleteAttribute (Desteksiz özellik) : Aslen sonraki sürüm ve/veya güncellemeler ile Desteklenmeyecek, yada başka bir ifade ile Tedavülden kalkacak bir özelliği işaret etmek için kullanılır. Assembly , modül, parametre ve geri dönüş değerleri dışındaki tüm program öğeleri için kullanılabilir.
- DefaultValueAttribute (Başlangıç değeri) : Bir sınıf oluşturulduğunda tanımlanan değişkenler tiplerine bağlı olarak ilk değerlerini alırlar. Constructor (Oluşturucu) methodunda ise istediğimiz alternatif atamalarını yapabiliriz, Ancak bunun için liave edeceğimiz ufak bir kod parçası ile Tüm tanımlı değişkenlerin atamalırını DefaultValue Attribute’u ile belirtilen değere otomatik olarak atanmasını sağlayabiliriz.
12345678910111213141516171819202122class Example002{public Example002(){//Ancak Default değerin atanması için Aşağıdaki kod yordamı ile atamasını yapmalısınız.foreach (PropertyDescriptor p in TypeDescriptor.GetProperties(this)){DefaultValueAttribute dv = (DefaultValueAttribute)p.Attributes[typeof(DefaultValueAttribute)];if(dv != null)p.SetValue(this, dv.Value);}}public int dv1 { get; set; }//using System.ComponentModel; eklenmiş olmalı[DefaultValueAttribute(37)]public int dv2 { get; set; }}
- DebuggerBrowsable() : Debug esnasında sınıfımıza ait property lerin, nasıl görünmesini yönetmek amaçlı bir Attrinbute. 3 opsiyonu ile;
- “Never” – Debug esnasında görünmemesi.
- “Collapsed” – Alt elemanları olan objeyi, default kapalı olarak görünmesini sağlar.
- “RootHidden” – Alt elemanları olan objeyi gizleyip, alt elemanlarını göstermek için.
123456//using System.Diagnostics; eklenmelidir.[DebuggerBrowsable(DebuggerBrowsableState.Never)]
- ?? operatörü : ?? ifadesi Tek satırlık, kısa bir isNull kontrolüdür, Null değil ise sol eşit ise sağ tarafındaki ifadeyi döndüren basic bir condition ifadesidir.
12345678string tmp = null;//Bu adımda Gösterim uygulanamıyor, Ekrana bilgi basılıyor.Console.WriteLine("?? ifadesi Tek satırlık, kısa bir isNull kontrolüdür, Null değil ise sol eşit ise sağ tarafındaki ifadeyi döndüren basic bir condition ifadesidir.");Console.WriteLine("Kullanım : {0}", tmp ?? "-(Null değer)-"); - NewLine : Adı aşikar yeni satır karakteri eklemek için kullanılabilir.
123456//Her bir değişken ifade yerine yeni satıra geçiş eklenmiiş olur.Console.WriteLine("yeni satır: {0} 1. Satır :{0} 2. Satır :{0} 3. Satır :", Environment.NewLine);
- BigInteger : Bu değişken immutable’dır ve diğer birçok tipin aksine min,max değerleri olmadığı için aşırı büyüdüğü taktirde “OutOfMemoryException” hatası alma riski vardır.
- __arglist , __reftype, __makeref, __refvalue : C# ta dökümante edilmemiş, ancak visual studio nun tanıdığı bazı özel keywordler mevcut. Kısaca incelersek ;
12345678__arglist - Arguman listesi olarak parametre geçmek için kullanılır.__makeref - Tip referanslı objenin referansını almak için kullanılır.__reftype - Tip referanslı objenin tipini almak için kullanılır. (<strong>_makeref</strong> in tam tersidir.)__refvalue - Tip referanslı objenin gerçek değerini almak için kullanılır.
8. ExceptionDispatchInfo : Uygulamanın bir noktasına yakalanmış hatayı ifade edip saklamanıza yarar. .Trow() methodu ile ilgili aksiyonlarınızı aldıktan sonra anynı hatayı orjinal stacktrace ini koruyarak fırlatabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
private static void exceptionHandlingExample() { //using System.Runtime.ExceptionServices; eklenmeli ExceptionDispatchInfo possibleException = null; try { //Hata verdirmek için saçma bir kod ekliyoruz. int.Parse("a"); } catch (FormatException ex) { possibleException = ExceptionDispatchInfo.Capture(ex); } //yapacağınız işlemler. //... //.. //. if (possibleException != null) { //Orjinal hatayı fırlatıyoruz. possibleException.Throw(); } } |
9. IsInfinity : Belirtilen sayının -/+ sonsuza eşdeğer olup olmadığını verir.
1 2 3 4 5 |
Console.WriteLine("IsInfinity(3.0 / 0) == {0}.", Double.IsInfinity(3.0 / 0) ? "Doğru" : "Yanlış"); |
Yukarıdakine benzer bir kodun ekran çıktısı şu şekilde olacaktır;
10. Debug.Assert, Debug.WriteIf, Debug.Indent, Debug.WriteLine : Debug esnasında değişik uyarı işlemleri için kullanılır.
- Debug.Assert : Verilen koşul sağlanmaz ise, call stack (çağrım geçmişi) ‘ini içeren bir mesaj çıkarır.
- Debug.WriteLine : Output ekranına bilgi yadırmak için kullanılır.
- Debug.WriteIf : Kontrollü olarak bilgi yazdırmak için kullanılır.
- Debug.Indent : Bilgi yazdırırken, hizalamayı ayarlamak için işe yarayacaktır.
12345678910111213141516//using System.Diagnostics; eklenmeli.Debug.WriteLine("Debug mesajları nasıl şekillendirilir?");Debug.Indent(); //Hizalamayı Sağa kaydıralım.Debug.WriteLine("1 Debug.WriteLine");Debug.WriteLine("2 Debug.Indent");Debug.WriteIf(1 == 1, "Sanırım 1=1 bu kesin :)");Debug.WriteLine("2 Debug.WriteIf");Debug.WriteLine("3 Debug.Assert");Debug.Unindent();//Hizalamayı Sola kaydıralım.Debug.WriteLine("Komutların sonu.");Debug.WriteIf(1 == 0, ":( bu satır görünmeyecek");Debug.Assert(1 == 0, "Şu işe bakın 1=0 değilmiş :) ");