C# Yazılım Dersleri — 4 - OOP

Learning Zone
3 min readJan 22, 2018

--

Delagate, Generic Class, Otopark Otomasyonu

Delegate

Bir sayıyı taşımak için değişken kullanabiliyoruz. Peki ya metodu taşımak istersek?
İnşaatteki kum, çimento, tuğla elemanları taşıyan Field ise
kepçe, vinç, dozer taşıyan ve çalıştıran delegate’dir.

Simgesi kutu içinde pembe kutu. Pembe kutu metodun simge rengi.

Invoke() metodu ile delegate edilmiş metodu başlatıyoruz.

Kodun tamamı:

kod parçası 1
kod parçası 2

event’in tipi delagete olmak zorunda.

Yapılan örneğin linki: https://github.com/ZoneLearning/CSharpFormExample/tree/master/Event_Delegate_Example

5 temel tipten biri olan delegelerin kullanım amaçları, metot adresi saklamaktır. Bazen metotlarımızı, ihtiyacımız olduğu anda çalıştırmak isteyebiliriz. Olay(event) tabanlı programlama ve asenkron programlama yaparken, anonim metot yazarken delegelerden faydalanırız. Bir diğer kullanım amacı da, bir metoda parametre olarak başka bir metot verebilmektir. Bu yazımızda temel olarak delegenin ne olduğununu, nasıl tanımlandığını, nasıl kullanıldığını ve nasıl bir mantıkla çalıştığını inceleyeceğiz.

Delegeler referans türlü bir tiptir. Dolayısı ile nesneleri heap’de durur. Girişte bahsettiğimiz gibi, görevleri metot adresi tutmaktır. Burada dikkat edilmesi gereken nokta; delegenin imzası, tuttuğu metodun imzası ile aynı olmalıdır. İmzadan kastımız, geriye dönüş tipi ve aldığı parametrelerdir. Bir delege, birden fazla metot adresi tutabilir. Bu durumda FIFO (ilk giren ilk çıkar) prensibi geçerlidir. Yani metotlar, delegeye bağlanma sırasına göre çalışırlar. Sonuç almak istediğimiz zaman, en son eklenen metodun yaptığı işi görürüz.

[ http://onursalkaya.blogspot.com.tr/2011/03/c-delegate-nedir.html ]

[ http://bidb.itu.edu.tr/seyirdefteri/blog/2013/09/06/c-'ta-temsilci-(delegate)-ve-olay-(event)-kavram%C4%B1 ]

Java’da delagate yok, nested class, Handler var → http://stackoverflow.com/questions/44912/java-delegates

Bu makaleyi oku : http://www.onjava.com/pub/a/onjava/2003/05/21/delegates.html

Generic Class

Esnek tip sistemi. ArrayList Add metodu object parametresi alır.

Generic’ler tasarlandığımız interface, class, metod yada parametrelerin (argümanların) belirli bir tip için değil bir şablon yapısına uyan her tip için çalışmasını sağlayan bir yapıdır. Generic’ler C++’taki şablon (template)’lerle benzerlik göstermesine karşın, uygulanış (implementation) bakımından farklılıklar göstermektedir.

Generic’lerin bize sağladığı avantajlar :

  • Yazılım parçacıkları içerisinde tekrar kullanılabilir kod yazmamıza yardımcı olarak kod tekrarını önler.
  • Kaliteli ve daha yönetilebilir kod yazmamıza olanak sağlar.
  • Çalışma zamanında (run time) gereksiz Cast ve Boxing-Unboxing kullanmasını önlediğinden efektif performans sağlar.
  • Derleme zamanında (compile time) (type safe) tip güvenli değişken kullanılmasını zorlayarak çalışma zamanında oluşabilecek tip dönüşüm hatalarını önler.
  • Programcıya kod üzerinde daha güçlü esnek bir kontrol sağlar.

http://www.ismailgursoy.com.tr/generic-yapilar/

Otopark Otomasyonu

Note:

Ram’in Stack ve Heap alanları arasındaki farklar.

Değer ve referans olarak değer kopyalama farkı.

Clone() metodu ile aynı nesneden farklı bir kopyasını oluşturma. ( Aynı içerik, farklı fiziksel alan)

Sınıf bir şablon. Sınıf içerisine değer atmayız. O sınıfın bir instance, nesnesi üretilir. Ona değer atılır.

Kek kalıbı →Class, Yapılan pasta,kek →instance,nesne

Garbage Collector [ http://www.ahmetkaymaz.com/2007/10/23/bellek-yonetimi-ve-cop-toplama-garbage-collection-ozet/ ]

Profesyonel programlamada: Hiç bir değişken kontrolsüz atanıp, kontrolsüz alınmamalıdır.

field: değeri tutar, property: değerlere erişir.

listeyi static tutarak →Ram’de veri tabanı yapmış gibi oluyorum.

public static List<Product> list = new List<Product>();

Kaynak kod kısmından UI kısma geçiş → Shift+F7
UI’dan koda geçiş →F7

--

--