Koray Kırdinli

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

Güzel bir hikaye

Asya’da maymun yakalamak için kullanılan bir çeşit tuzak vardır. Bir hindistancevizi oyulur ve iple bir ağaca veya yerdeki bir kazığa bağlanır. Hindistancevizinin altına ince bir yarık açılır ve oradan içine tatlı bir yiyecek konur. Bu yarık sadece maymunun elini açıkken sokacağı kadar büyüklüktedir, yumruk yaptığında elini dışarı çıkaramaz. Maymun, tatlının kokusunu alır, yiyeceği yakalamak için elini içeri sokar ve yiyeceği kavrar, ama yiyecek elindeyken elini dışarı çıkarması olanaksızdır. Sıkıca yumruk yapılmış el, bu yarıktan dışarı çıkmaz. Avcılar geldiğinde, maymun çılgına döner ama kaçamaz. Aslında bu maymunu tutsak eden hiçbir şey yoktur. Onu sadece kendi bağımlılığının gücü tutsak etmiştir. Yapması gereken tek şey elini açıp yiyeceği bırakmaktır. Ama zihninde açgözlülüğü o kadar güçlüdür ki bu tuzaktan kurtulan maymun çok nadir görülür. Bizi tuzağa düşüren ve orada kalmamıza neden olan şey, arzularımız ve zihnimizde onlara bağımlı oluşumuzdur. Tüm yapmamız gereken, elimizi açıp benliğimizi ve bağımlı olduğumuz şeyleri serbest bırakmak, özgürleşmektir. …. Joseph Goldstein

Nisan 19, 2010 Posted by | Yaşam | , , | Yorum bırakın

MCTS – Searching , Modifying and Encoding Text

3. Searching , Modifying and Encoding Text

Metinler üzerinde işlem yapmak yazılım geliştiricilerin çok sık yaptığı işler arasında yer alır.Bu yazıda düzensiz gelen bir metnin düzenli hale nasıl getirilebileceği üzerine çalıyor olacağız. Kısaca StringBuilder,Regex, Match , MatchCollection , Group , GroupCollection , Encoding , Decoding ve Capture sınıflarını inceleyeceğiz.

Regular Expressions : Bir metnin belirtilen formata uyup uymadığını kontrol eden bir dizi karakterlerden oluşur.

Regex.IsMatch(value, “^d{5}$”); //12345,14234 olur.

^ : stringin başlangıç noktasını işaret eder.
d : Sadece nümeric değer alabilir.
{5} : Sadece 5 karakter alabilir.
$ : stringin bitişi
* : tekrarlayan karakterler için kullanılır.
n : basamak sayısı
? : Bir karakteri opsiyonel yapmak için kullanılır.
//do(es)? do veya does geçerli.
x|y : Yazılan iki karakterden biri.
//(z|f)ood için sadece zood ve food olabilir.

Eğer yukardaki ifadenin başındaki ^ işareti kaldırılırsa 12345 yine geçerli olur ancak bu sefer abc12345 de geçerli olur. Bu yüzden düzenli ifadelere ^ işareti ile başlayıp $ işareti ile sonlandırmak güvenlik açısından önemlidir.

string regex = “Kor*y”; // Kory,Koray,Koraaay olabilir.
string regex2 = “Kor{1}y”; //Koray,Koroy olur , Koraay olmaz
string regex3 = “Kor{1,2}y”; //Koray,Koroy,Koraay olur , Koraaay olmaz

//Sadece Company Name: ile başlayan kısmı varsa geri

//kalan kısmı m ye atar yoksa boş döner

Match m = Regex.Match(txtCompanyName.Text, @”Company Name: (.*$)”);

MessageBox.Show(m.Groups[1].ToString());

Örnek telefon numarası kontrolü için regex
^([0-9]( |-)?)?((?[0-9]{3})?|[0-9]{3})( |-)?([0-9]{3}( |-)?[0-9]{4}|[a-zA-Z0-9]{7})$

Regular expressionlar ile bir stringi düzenleme işlemi de yapılabilir.

Encoding/Decoding : .NET frameworkte encoding işlemi otomatik olarak yapılır ancak bazen bu işlemi manuel yapmakta gerekebilir.
ASCII : İngiliz alfebesinde kullanılan bütün harf ve karakterleri içerir.
ANSI : American National Standarts Institue nin getirdiği standart ile farklı alfabelere sahip ülkelere arasında dosya paylaşımı sorunsuz bir şekilde yapılabilmektedir.
Unicode : 10 binlerce karakterden oluşan en büyük karakter setidir. UTF16 ve UTF8

.NET içerisinde System.Text namespace’i UTF-32,UTF-16,UTF-8 ,ASCII,ANSI/ISO tiplerinde karakterleri encode ve decode yapabilirler.

//Hello word! Tekstini Kore karakterlerine göre ASCII kodlarını listboxta listeler

Encoding ee = Encoding.GetEncoding(“Korean”);

byte[] encoded = ee.GetBytes(“Hello World!”);

for (int i = 0; i < encoded.Length; i++)

{

    listBox1.Items.Add(encoded[i].ToString());

}

//.NET Framework ün desteklediği encoding bilgilerini listeler

EncodingInfo[] ei = Encoding.GetEncodings();

foreach (EncodingInfo item in ei)

{

listBox2.Items.Add(String.Format(“{0} – {1} – {2}”,item.CodePage,item.Name, item.DisplayName));

}

 

//Dosyaya teksti utf32 olarak yazmak

StreamWriter writer = newStreamWriter(“utf32.txt”, false, Encoding.UTF32);

writer.Write(“Koray Kırdinli”);

writer.Close();

Utf32,Utf8,Utf16 her bir tipte dosyaya yazılan textler farklı dosya tipleri farklı boyutlarda dosyalar oluşturur.

Nisan 17, 2010 Posted by | C# | , , , , | Yorum bırakın

Kurumsal Bir Firmada Çalışmak

Kuveyt Türk te çalışmaya başlayalı tam 4 ay olmuş. Geriye dönüp baktığımda zamanın ne kadar hızlı akıp geçtiğini , zamanın bize verilen büyük bir nimet olduğunu düşünüyorum.

Gelelim konumuza ; bir yazılımcı için kurumsal bir şirkette çalışmanın artı ve eksilerini yine kendi bakış açımdan değerlendirmeye çalışacağım.

Öncelikle belirtmeliyim ki sektöre yeni atılacak kişilere şunu söylemeliyim ki iş hayatına kurumsal bir firmada başlamak bana göre bir dezavantaj. En az bir yıl burnumuzun küçük bir kobi de sürtmesi bazı şeylerin önemi ve farkına varmak için çok faydalı olacaktır diye düşünüyorum. Gerçi ben bu süreyi 3 yıl yaşadım ama 1-3 yıl arası ideal diyelim.Kendimi de zorla katogoriye soktum :)

Bir kere küçük şirkette başlayıp işin her yönüyle sorumlusu  olmak hem insan bir güven veriyor hem de işin bütününe bakabilme fırsatı veriyor. Yazılım sadece kodlamadan ibaret değil ; analiz , tasarım , kodlama , dökümantasyon , test , dağıtım , pazarlama vs.vs. çoğaltmak mümkün. Bu bacakların bir çoğunda bulunmak bütüne bakabilmenizi sağlıyor. Küçük şirketlerde bu böyle ancak kurumsal şirketlerde herkesin bir görevi var ve gerisine karışmıyor bu da uzmanlık kazanma anlamında size fayda sağlıyor.

Kurumsal şirketlerin bir eksisi çok prosedür olduğu için etkili kod yazamayışınız :( bu biraz sizi sıkıntıya sokup köreltebiliyor. Kobilerde ise çok hızlı kod yazıp sonucunu görebiliyorsunuz.

Kurumsal firmalarda her ne kadar hepsinde olmasa da daha üst konulara eğilme şansınız oluyor ve daha kaliteli kod geliştirmeye zorlanıyorsunuz bu da bir artı.

Diğer yandan kurumsal firmalarda bilgiye ulaşmak çok kolay. Örneğin bize her cuma Microsoft’un atadığı bir uzman problemlerimizi gidermeye geliyor. Kitaplar , eğitimler , tecrübeli eski çalışanlar derken bir problemi çözememe şansınız yok ancak küçük şirketlerde bu imkanlar çok daha kısıtlı.

Kurumsal firmanın bir diğer artısı ise yapacağınız işin net olması ve yazılı olması.

İşin sosyal haklar tarafına gelince burada kurumsal firmalar bir değil on adım öne çıkıyor. Servis,yemek, yardımlar,sigorta,özel sağlık sigortası , kıyafet yardımı,primler.Gelecek garantisi daha fazla maddi anlamda kafanız rahat olur. Küçük şirketlerin birçoğunun mali gücü bunları karşılamaya yetmiyor.

Küçük şirketlerde biraz daha rahat hareket edebiliorsuz ancak kurumsal firmalarda belli bir düzen ve prosedüre uymak zorundasınız.

Büyük şirketlerde daha çok arkadaş edinme şansınız var. Bir çok organizasyona katılabilirsiniz kurumiçi . Örneğin istanbula geldiğimden beri özlemini çektiğim halısaha organizasyonları artık yapabiliyorum . Aşağıda da turnuva takımımızın bir resmi :)

Sonuç itibariyle her ikisininde tadına bakmak gerekli. Artılar eksiler sizin hayattan ne beklediğiniz ile alakalı. Her gözden farklı çıkarımlar elde edilebilir.

Nisan 16, 2010 Posted by | Yaşam | , , | 1 Yorum

MCTS – Input/Output (IO) – Dosya İşlemleri

2.    Input/Output (IO) – Dosya İşlemleri

 

Bu yazıda aşağıdaki kavramlara kısaca değineceğiz. File,FileInfo,Directory,DirectoryInfo, DriveInfo,DriveType, FileSystemInfo,Path,FileSystemWatcher

FileSystemInfo sınıfı IO işlemleri için base sınıftır.

Bir dosyaya erişmek
FileInfo fi = newFileInfo(“SystemIO.txt”);

if (fi.Exists)

{

   string text=String.Format(“{0} – {1}”,fi.Name,fi.FullName);

   richTextBox1.Text = text;

}

Bir dizindeki dosyaları listelemek
DirectoryInfo directory = newDirectoryInfo(@”C:”);

foreach (FileInfo item in directory.GetFiles())

{

     lstFiles.Items.Add(item.Name);

}

 

 

Diskteki Sürücüleri listelemek(c,d,e,..)
DriveInfo[] drives = DriveInfo.GetDrives();

foreach (DriveInfo item in drives)

{

    lstDrivers.Items.Add(item.Name+ ” – “+item.DriveType.ToString());

}

FileSystemWatcher bir dizinde meydana gelen değişiklikleri izlemeye yardımcı olur.

FileSystemWatcher fsw = newFileSystemWatcher(@”C:”);

fsw.Created+=newFileSystemEventHandler(fsw_Created);

fsw.Changed+=newFileSystemEventHandler(fsw_Changed);

fsw.EnableRaisingEvents = true;

Bir data işlemi söz konusu olduğunda bunları memory de stream denilen ve Stream sınıfından türemiş sınıflar kullanılır.Bunlar: FileStream,MemoryStream,CryptoStream,NetworkStream,GZipStream

Bir streamin sonuna byte arrayi ekleyen metod
void AppendDataToStream(Stream stream, byte[] data)

        {

            //Streamde pozisyonu sona getir

            stream.Position = stream.Length;

            //Byte dizisini streame ekle

            stream.Write(data, 0, data.Length);

        }

File sınıfı okuma veya yazma işlemleri için bir dosyayı açmaya ve kapamaya yarar.
FileStream file = File.Open(“SystemIO.txt”, FileMode.Open, FileAccess.Read);

StreamReader streamReader = newStreamReader(file);

lblText.Text = streamReader.ReadToEnd();

streamReader.Close();

veya bu işi tek satırda da halledebiliriz.

lblText.Text = File.ReadAllText(“SystemIO.txt”);

BinaryReader ve BinaryWriter bir dosyaya veriyi binary olarak işlemek ve geri binary olarak okumak için kullanılır. Binary olarak yazılan bir dosya ancak binary olarak geri okunabilir.
FileStream newFile = File.Open(“SystemIO.bin”, FileMode.OpenOrCreate);

BinaryReader reader = newBinaryReader(newFile);

long number = reader.ReadInt64();

byte[] bytes = reader.ReadBytes(4);

string s = reader.ReadString();

reader.Close();

MemoryStreams hafızada oluşturulan stream nesneleridir.Bir streami fiziksel olarak bir yerlere kaydetmeden önce memory de saklayabiliriz.

MemoryStream stream = newMemoryStream();

//Once memory e bilgiler yazilir

StreamWriter writer = newStreamWriter(stream);

writer.Write(“Hello”);

writer.Write(“GoodBye”);

writer.Flush();

//Memory deki bilgiler dosyaya kaydedilir.

FileStream file = File.Create(@”MemoryStrem.txt”);

stream.WriteTo(file);

writer.Close();

file.Close();

stream.Close();

 

 

BuffuredStream direk olarak bir streamlere yazıp okurken performansı artırmak için kullanılır.

FileStream newFile = File.Create(@”buffered.txt”);

BufferedStream buffered = newBufferedStream(newFile);

StreamWriter writer = newStreamWriter(buffered);

writer.WriteLine(“some data”);

writer.Close();;

Sorular:
– FileStremin pozition propertisini hangi metod etkiler
Read,Write,Seek metodları

 

Compressing Streams:
Streamleri sıkıştırmak için .NET te 2 yöntem mevcuttur. GZip ve Deflate.
Peki hangisini kullanmalıyız. İkiside aynı algoritmayı kullanmaktadır. GZip ile sıkıştırılan bir stream gzip aracıyla açılabilir. Sıkıştırma ve açma işlemleri sadece kendi sisteminiz içerisinde olacaksa Deflate biraz daha fazla sıkıştırma yaptığı için tercih edilebilir. Fakat sıkıştırılan dosyayı dağıtacaksanız Gzip kullanılmalıdır.

FileStream sourceFile = File.OpenRead(“SystemIO.txt”);

FileStream destFile = File.Create(“SystemIO”);

 

Stream compStream = newGZipStream(destFile, CompressionMode.Compress);

 

if (rbGzip.Checked)

{

    compStream = newGZipStream(destFile, CompressionMode.Compress);

}

elseif (rbDeflate.Checked)

{

    compStream = newDeflateStream(destFile, CompressionMode.Compress);

}

int theByte = sourceFile.ReadByte();

while (theByte != -1)

{

    compStream.WriteByte((byte)theByte);

    theByte = sourceFile.ReadByte();

}

Isolated Storage : Bir kullanıcıyı full yetkili olarak bir programı kullandırmak güvenlik zaafiyetlerine yol açabilmektedir. Bir kullanıcıya limitli erişim vermek için isolated storage’ler kullanılır. Isolated Storage ler kullanıcı bilgilerini güvenli bir ortamda saklamayı sağlarlar. En önemli avantajı da işletim sisteminde partial,limited veya full-trust çalışılmasının önemli olmamasıdır.
İlk önce saklayacağınız verinin skobunu belirlemeniz gerekiyor.

Assembly/Machine : Bu metod çağrılan assembly e ve makineye özgüdür. Application- Level Data için uygundur.

//Bu storage sadece çağıran assembly e özgüdür.Bu bir windows form uygulaması

//olabileceği gibi bir DLL de olabilir.

IsolatedStorage machineStorage = IsolatedStorageFile.GetMachineStoreForAssembly();
Assembly/User : Bu metod çağrılan assembly e ve kullanıcıya özgüdür. User Level Data için uygundur.
Aşağıdaki user bazlı storage e okuma ve yazma örneği yapılmıştır.

IsolatedStorageFile userStorage = IsolatedStorageFile.GetUserStoreForAssembly();

//Bu storage çağıran kullanıcıya özgüdür.Personalization

//Önce isole edilecek dosya olusturulur

           

//Sonrada isole edilmiş stream olusturulur ve dosya bu streame eklenir.

IsolatedStorageFileStream userStream = newIsolatedStorageFileStream(“UserSettings.set”, FileMode.Create,userStorage);

 //Stream writer ile yazılır.

 StreamWriter writer = newStreamWriter(userStream);

writer.WriteLine(“Kullanici Bilgileri”);

writer.Close();
//Okuma
IsolatedStorageFileStream userStream = newIsolatedStorageFileStream(“UserSettings.set”,FileMode.Open,userStorage);

string[] files = userStorage.GetFileNames(“UserSettings.set”);

for (int i = 0; i < files.Length; i++)

{

    MessageBox.Show(files[i]);

}

Isolated Storage’da dizin oluşturma:
IsolatedStorageFileStream userStream = newIsolatedStorageFileStream(@”DizinUserSettings.set”,FileMode.Create,userStorage);

string[] directories = userStorage.GetDirectoryNames(“Dizin”);

if (directories.Length == 0)

{

    userStorage.CreateDirectory(“Dizin”);

}

Nisan 15, 2010 Posted by | C# | , , , , | Yorum bırakın

Boğaziçi üniversitesi bilişim fuarı

Boğaziçi Üniversitesi Bilişim Kulübü Compec 19-20-21-22 NİSAN 2010 Tarihlerinde EXIT (expo IT) adlı organizasyonu düzenliyor.

EXIT ‘10
BOĞAZİÇİ ÜNİVERSİTESİ BİLİŞİM FUARI
19-20-21-22 NİSAN 2010
ÖFB (Öğrenci Faaliyetleri Binası) Demir Demirgil Salonu – Güney Kampüs

4 gün boyunca çeşitli seminer ve panellerin yer alacağı bir bilişim fuarı olan EXIT ‘10 teknoloji-severlere kapılarını açıyor. Apple, TTNet gibi teknoloji devleri etkinlik boyunca Güney Meydan’da kuracakları standlarda sizleri bekliyor olacak. Ayrıca bu fuarda önemli girişimciler yeni projelerinden bahsedecek ve gelecekteki muhtemel üyeleriyle tanışma fırsatı yakalayacaklar! Girişimcilerin temsilcileri açtıkları standlarda ürünleriyle ilgili bilgi verecek, ilgili broşürler dağıtacak ve küçük yarışmalar düzenleyecekler.

Etkinlik Programı aşağıdaki gibidir.

19 Nisan Pazartesi:
– 12:00 Murat Göce / Kaspersky Labs Türkiye Genel Müdürü
– 13:00 Jale Akyel / IBM Üniversitelerle İlişkiler Koordinatörü
– 15:00 Hasan Toprakkaya / KariyerGENÇ Kurucusu
– 16:00 Ergin Kılınç / INTEL Pazarlama Müdürü

20 Nisan Salı:
– 10:00 Mustafa Çağan / Microsoft Türkiye Genel Müd. Yrd.
– 13:00 Okan Alper / Turkcell İnternet ve Komüniteden Sorumlu Bölüm Başkanı
– 15:00 Abdulkadir Uyar / Oracle
– 16:00 Erkin Fındık / TÜBİDER Yönetim Kurulu Başkanı

21 Nisan Çarşamba:
– 13:30 Ali Servet Eyüboğlu / TTNet Ürün Geliştirme
– 14:45 Hakan Turgut / PDA Danışmanlık Eğitimcisi Muhammed Alpkent / PDA Danışmanlık Eğitimcisi
– 16:15 Abdulkadir Özbek / PDA Danışmanlık Genel Koordinatörü
– 17:15 TTNet Netbook Çekilişi

22 Nisan Perşembe:
– 11:00 Cenk Angın / GittiGidiyor.com Genel Müdürü
– 12:00 Deniz Oktar / İletken Teknoloji Genel Müdürü Oğuzhan Aygören / Cepkod Kurucusu
– 14:00 Ali Akurgal / Akurgal Danışmanlık Genel Müdürü
– 15:00 Ercüment Büyükşener / Sony Vaio Avrupa (Belçika)
– 16:00 Av. Serhat Koç / Bilişim Hukuku

*Etkinlik boyunca Apple markalı ürünler tüm katılımcılara %15 indirimle satışa sunulacaktır!
*Tüm seminer ve paneller sertifikalıdır!

Nisan 14, 2010 Posted by | Etkinlikler | , , , | Yorum bırakın

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.

Nisan 8, 2010 Posted by | C# | , , , | Yorum bırakın