Koray Kırdinli

Yazılım ve İş Yaşamı Hakkında Paylaşımlar

MCTS – Framework Fundamentals

1.    Framework Fundamentals

Sınav Konuları : Value Types,Reference Types,Attributes,Generic Types,Exception Classes,Boxing and Unboxing,TypeForwordedToAttribute Class
Icomoarable , IDisposable , IConvertable , IClonable , IEquatable , IFormatable interfaces

Delegate  class , Eventargs class , Eventhandler delegates

  1. Değer Tiplerini Kullanmak.

 

Boolean, nümerik gibi basit tiplerdir ve memory de data bir referans ile değil direk olarak tutulur.
3 tip değer tipi vardır. Built-in (.NET Framework ile gelen hazır tiplerdir),user defined (structs) ve enumarations.

Best Practice : Sık kullanılan counterlar için integer tipleri kullanmak ve floating sayılar için double kullanmak iyidir çünkü runtime performanslarını optimize eder.

 

Değer tiplerinde datayı bir değişkenden başka bir değişkene kopyalamak demek stack ta iki ayrı lokasyona yazılması demektir.

 

Bir değer tipine null kabul eder hale getirmek : Örneğin bir formunuz var evet/hayır değeri var ancak boş ta olabilir. O zaman

Nullable b = null veya bool? b=null olarak tanımlanabilir.

Bu değişkenin null kontrolünü ise    if(b.HasValue) diyerek kontrol edebiliriz.

Struct’lar sınıflardan daha etkilidirler. Eğer struct işinizi çözüyorsa struct kullanmak performansı artırır. Struct tanımlaması sınıflar ile birebir aynıdır tek fark keyword dür.

 

 

  1. Genel Referans Tiplerini Kullanmak.

 

Referans tipleri için stack’ta pointer adı verilen datanın adresi saklanır.Gerçek data ise memory de heap’te saklanır.Runtime memory’i heap’i işleten Garbage Collection tarafından yönetir.Garbage Collection memory’yi periyodik olarak ihtiyaç olduğunda veya GC.Collect triggerı tetiklendiğinde boşaltır.

Bir referans tipini diğerine kopyalanırsa data değil adresleri aynı olur.

Built-in referans tiplerden bazıları : System.Object ,String , Text.StringBuilder , IO.Stream , Exception
String bir değişken değiştirilirse eskisi memory den atılmadan yeni bir instance ‘ı oluşur.

string s = “Koray”;

s+=”Kırdinli”

Yukardaki örnekte stringin son değerinin bir referansı vardır ilk değeri ise referansı yoktur ancak memory de hala bulunmaktadır. Bu tarz işlemleri Concat,Join,stringBuilder veya Format gibi fonksiyonlarla yapmak gereksiz garbage collection yapmayı engeller dolayısıyla performansı artırır.

Streamler : Diske yazmak ,diskten okumak ve ağ haberleşmesi için streamler kullanılır. Network streamleri System.Network.Sockets namespace’i altında Şifrelenmiş streamler ise System.Security.Cryptography namespace’i altında bulunur.

Stream Tipleri :
FileStream : Dosyaya yazma,okuma için base stream’dir.
MemoryStream : Memory’e yazma okuma için base stream’dir.
StreamReader : Stream’den data okur

      StreamWriter : Stream’e data yazar.

Exceptions : Kendi Exception sınıfını oluşturmak için sınıfı ApplicationException base sınıfından türetmek gerekir.

 
Framework içerisinde bir çok sınıf var ve bu sınıfların ortak olan özelliklerini ve metotlarını standardize etmek için interface’lerden inherit edilirler

Sık kullanılan interface’ler
IComparable : Sort (Sıralama) işlemi için kullanılır.
IDisposable : Kaynakları serbest bırakmak için kullanılır. metot : Dispose()
IConvertable: Base tipi bool,byte gibi değerlere dönüştürebilmek için kullanılır.
IClonable : Nesneyi kopyalamak için kullanılır.
IEquatable : İki nesneyi eşit mi diye kontrol etmek için kullanılır. İf(a==b)
IFormatable : Nesneyi formatlaı bir stringe dönüştürmeye yarar.

 

Attributes: Bir property veya metoda programatik olarak Reflection tekniği kullanılarak tip tanımlamayı sağlar.Attribute’ler ile bir sınıfa güvenlik ayarları verilebilir,güvenlik riskini azaltılabilir,kabileyet kazandırılabilir (serizilation gibi),title,description,copy right gibi assembly tanımlanabilir.

 

Örneğin bir namespace’e erişim için bir lisans dosyası gerekliyse aşağıdaki attribute kullanılabilir.
[assembly:FileIOPermissionAttribute(SecurityAction.RequestMinimum,Read=@c:lisans.ini)]
namespace ExampleNamespace{}

 

TypeForwarding: bir A assembly’si içindeki bir tipi B assembly’si içerisine taşıma işlemine denir.Böylece A assembly sini tekrardan compile etmeye gerek kalmadan clientlarda kullanabiliriz.
using System.Runtime.CompilerServices;
[assembly:TypeForwardedTo(typeof(DestLib.TypeA))]

 

Boxing ve Unboxing ten kurtulmak için ipucu :
– Object alan bir metod yerine her bir tipten alan override edilmiş metodlar kullanmak

– Generic kullanmak
– Structure kullanırken ToString,Equals,GetHash virtual üyelerini kullanmak.

April 8, 2010 - Posted by | C# | , , ,

No comments yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s