N-Tier Architecture (Katmanlı Mimari) nedir ? Nasıl yapılır?

Merhaba,

Katmanlı mimari yapısını aslında aşağıdaki resimle özelteyebiliriz.

Projelerimizde olmazsa olmazımız database bağlantılarıdır, databaseden veri çekme, ekleme, silme, güncelleme gibi işlemler yapmak istediğimizde bütün yükü UI(user interface) yüklemek çok doğru olmayacaktır.
Bu aşamada katmanlı mimari devreye girecek databaseden verileri çeken  DLL (Data Access Layer) katmanı işlemlerin yapılacağı BLL (Busines Logic Layer) katmanı ve sunum yapılan katman UI (User Interface) katmanı yer alacak bu yapı isteğe göre çoğaltılabilir ve yük paylaşımı yapılır.
Katmanlar birbirleriyle reference gösterilerek haberleşeceklerdir.
Bu bölüm biraz sıkıcı olabilir ama ufak bir örnekle MSSQL de yer alan Northwind veritabanını örnek olarak bir proje yapalım.

Her zamanki gibi Visual Studio muzu açıyoruz ve yine Blank Solution açarak wfa uygulamasını ve aynı zamanda projectlerden class library projelerini açarak DAL ve BLL isimli iki tane Class library oluşturuyoruz.

DAL katmanımıza yeni bir folder ve bu foldera new item diyerek   Ado.net Framework ile database mizi tanıtıyoruz.

Sonraki aşamlarda bir kaç makale önce tanıttığımız Ado.net Framework kurulumudur, onun için hızlı geçiyorum.
Aşağıda görüleceği gibi bütün verilerimiz(tablolarımız) geldi. Bu veriler database de tablo iken C#da sınıftır.

BLL katmanında ise metotlar, kontroller gibi iş yapacak komutlarımızı yazıyoruz.
Ve BLL katmanına DLL i referenca veriyoruz.

Aynı şekilde UI katmanınada (örnek projedeki adı NTier_01) BLL ve DAL katmanlarını reference veriyoruz.

Böylelikle UI katmanımızdan database ulaşabiliyoruz. Yani database doğrudan UI ve tutmadan farklı bir katman ulaştık, yada BLL katmanında database bilgilerini tutmadan DAL dan  ulaştık gibi düşünebilirsiniz.
Böylece iş yükünü dağıtmış olduk ve herkes kendi işini bilsin dedik

Umarım birşeyler anlatabilmişimdir.

Entity Framework > CodeFirst ile yeni database oluşturma

Merhaba Arkadaşlar,

MS Sql deki databaseler içerisinde yer alan her tablo visual studio(C#)da bir class demektir.
Peki codefirst ile ne yapacağız ?
Çok basit olarak bir WindowsFormsApplication penceresinin açılmasıyla sql üzerinde bir database ve tablolarının oluşmasını sağlayacağız.
Bunun için projemizde sınıflar(sel deki tablolar) oluşturacağız adım adım gittiğimizde ne demek istediğimiz ve ne yapmak istediğimi en sonunda göreceksiniz.

O zaman hiç vakit kaybetmeden visual studio ortamımızı açalım ve başlayalım.
İlk önce her zaman olduğu gibi boş bir “Blank Solution” açıyor ve ”New project” den uygulamamızı ve sınıflarımızı oluşturmaya başlıyoruz.
Burada ufak olarak base classımıza ortak bir özellik vererek diğer classların base classdan miras almalarınıda sağlayacağız.


Burada Category, Product, Entitybase, StokEntites diye 4 adet sınıf oluştrduk.
Category, Product, Entitybase(base class)  sınıflarımızda sqldeki tablolarımızın içeriğini(column name ve aşacakları tipleri) oluştururken  StokEntites de ise  DbContext sınıfından miras alarak database oluşturma işlemlerini yapacağız.

Bir diğer önemli alan ise  App.Config bölümüdür. Bu alanda asıl kayıt işlemlerini yapacağımız sql server bölümüne ait bilgiler vardır eğer bu alan doğru oluşturulmaz ise yaptığımız işlemler boşa gidecektir.

Burada bizim için önemli olan bölüm connectionStrings parametresinin içidir çünkü diğer alanlar zaten standarttır.

Windows Authentication bağlantısı yaptğımızda aşağıdaki gibi bir bağlantı yapmamız gerekmektedir.
connectionStrings>
<add name=”StokEntites_db” connectionString=”Server=pc\mehmet;integrated security=true;initial catalog=My_Db” providerName=”System.Data.SqlClient” />
</connectionStrings>

Eğer Sql de Windows Authentication değilde name ve password ile bağlantı yapmış olsaydık app.config deki connectionStrings parametresi aşağıdaki gibi olmalıydı.

<connectionStrings>
<add name=”StokEntites_db” connectionString=”initial catalog=My_Db; Server=pc\mehmet; username=sa; PWD=123″ providerName=”System.Data.SqlClient”/>
</connectionStrings>

Oluşturdğumuz classların içini aşağıdaki gibi dolduruyoruz.

StokEntites classımızda ise daha öncede söylediğimiz gibi  database create, table create işlemlerinin yanı sıra tableların içeriklerinide (nvarchar, desimal) belirliyoruz.

Burada önemli olan husus ise StokEntites sınıfımıza DbContext sınıfından miras alacağımız için using System.Data.Entity kütüphanesini eklememiz, bunun içinde Solution’a sağ tıklayıp Manage NuGet Packages’den Online bölümünden EntityFramework paketini indirmek.
Bu yükleme işleminden sonra kütüphane otomatik olarak gelecektir.

ve bu kadar işlemin ardından yapmamız gereken tek şey WFA loadına gelerek instance almak ve F5 tuşuna basarak projesi kaydettemek.
instance  aldıktan sonra sadece db oluştumu diye dataGridView ile ekrana başlıkların gelip gelmediğine bakacağım.

MS sql açarak görsel olarak görmek istersek;

İşte bu kadar yararlı olması dileğiyle.

C#’da Xml’den Veri Okuma (Güncel döviz kurları)

Merhaba,

Bu örneğimizde Türkiye Cumhuriyet Merkez Bankası’nın resmi internet sitesinde insanlara  sunduğu  döviz bilgilerini C# yazıılım dilinde WFA uygulamasına xml den alarak okuyacağız.

Kod yapısı;

MS SQL LIKE KOMUTU KULLANIMI

Merhaba Arkadaşlar, Bugün sizlere Sql Server üzerinde Like komutunun nasıl kullanılacağını anlatacağım. Öncelikle LIKE komutu nedir? LIKE komutu = Where komutu ile aynı anlamda kullanılabilir yani bir alan içerisinde bir yazı aramak istiyorsak Likekomutu ile arama işlemini yapabiliriz. Hemen bir adet uygulama yapalım;

SQL LIKE Syntax

SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern;

deneme

Bu sorguad; select * from Employees where FirstName like ‘Nancy’ Yapmak istediğimiz  ”Employees” tablosunda, ”FirstName” column da ”Nancy” ile eşit  olan  kayıdı getir. LIKE komutunun kullanımı sadece bununla sınırlı değildir. Birçok kullanım şekli vardır LIKE komutunun şimdi bazı önemli olduğunuz düşündüğüm kullanımlarını da bakalım. 2 Burada ise; select * from Categories where CategoryName like ‘Con%’ sorgusu ile ”Categories” tablosunda  where (Nerede) ”CategoryName” column da, ‘Con%” =Con ile başlayanları getir. % işareti ile yapılmak istenen şudur; % eğer baştaysa= ‘%gel’= Nasıl başlarsa başlasın ama ‘gel’ ile bitsin. % eğer sondaysa= ‘git%’= ‘git’ ile başlasın nasıl biterse bitsin. % eğer başta ve sonda ise= ‘%Selamlar%’= Başı ve sonu da dahil  içinde ‘Selamlar’ ifadesi geçenleri getir. Bira karışmış olabilir ama örneklerle net olacaktır. 3select * from Categories where CategoryName like ‘%s’ Bu sorgu ile ‘CategoryName ‘ column da bulunan verilerden başı ne ile başlarla başlasın sonu ‘s’ ile biten ifadeler sorgulanmıştır.

Burada donem sutununun içerisinde “s” verisi geçen bütün kayıtları listeledik. “s” kelimenin başında ortasında sonunda neresinde olursa olsun hiç farketmez hepsini getirecek. Bunu ‘s’ in başına ve sonua % ifadesini koyarak gerçekleştirdik. Daha farklı kullanımlarda bulunmaktadır.

Bruada ‘__a%’ ile demek istediğim tam olarak şudur; ‘_’ boşluk(ne olursa olsun önemli değil) demektir, 2 adet _ koydum ve 3 karakteri ‘a’ olarak belirledim ve sonuna % koydum. İlk iki karakteri ne olursa olsun 3. karakter ‘a’ olsun ve  ne ile biterse bitsin farketmez. En çok işimize yarayacak komutlar genelde bunlardır.

MS SQL DDL

Merhaba Arkadaşlar,

Data Definition Language (DDL) tabloları veritabanı yapısı veya şema tanımlamak için kullanılır.

Bunlardan bazıları;

CREATE – Veritabanında nesne yaratır.
ALTER – Veritabanının yapısını değiştirir.
DROP – Veritabanından obje siler.
TRUNCATE – Tablodaki kayıtları içerdikleri alan ile birlikte siler.
COMMENT – Yorum ekler.
RENAME – Nesnenin adını değiştirir.

Aşağıdaki örneklerimizde kod üzerinden CREATE,DROP,ALTER VB. işlemleri yapacağız.

Databseoluşturma ve silme; ”create” komutu ile  Okul adında bir database oluşturuyoruz.

Create database Okul

Şimdi bu oluşturduğumuz Database i ”Drop” komutu ile  silelim.

Drop  database Okul

Şimdi ise hızlıca Üniversiteler adında bir database oluşturalım ve  bu database içerisine ”Create Table” diyerek tablolarımızı ve tablolaromızın içine column name, datatype ve Allow nulls alanlarını oluşturalım oluşturalım.

Oluşturduğumuz tabloların diagram görüntüsü ise aşağıdaki gibidir.

Umarım  biraz anlaşılmıştır.

C# Abstract Class Nedir?

Merhaba Arkadaşlar,

Abstact sözcüğünü soyut ya da özet olarak Türkçe’ye çevirebiliriz ancak teknik olarak devam edersek kendisinden kalıtım veren ancak new anahtar sözcüğüyle instance (örnek kopya) alınamayan sınıflardır diyebiliriz.

Aynı zamanda bir abstract sınıf içerisinde yine abstract sözcüğünü kullanarak metotlar oluşturabilir ve böylece abstract sınıfı tıpkı bir interface (arayüz) gibi kullanabiliriz.

Şimdi Visual Studio’yu açıyor ve C# programlama dilinde yeni bir Windows Form projesi oluşturuyoruz.Ardından
“kedi” adında bir abstract class oluşturuyoruz, daha sonra Abstact classımız tıpkı normal bir class niteliğinde olduğu için içerisine property ve metotlarımızı yazıyoruz:

Abstract sınıfımızı oluşturduktan sonra formumuzun load eventi (olayı) içerisinde new anahtar sözcüğüyle instance almaya
çalışıyor ve ortaya çıkan hatayı görüyoruz:

Visual Studio’nun bahsettiği gibi abstract olarak işaretli bir sınıftan instance alınamaz demiştik,ancak abstract class
başka bir sınıfa kalıtım verebilir.O yüzden “Tom” adında bir kedimiz olsun ve abstract olarak yazdığımız kedi sınıfından
kalıtım alsın:

Formumuza tekrar dönüyoruz ve “Tom” sınıfından instance alıyoruz:

Böylece abstract sınıftan kalıtım alan normal bir sınıftan instance alınabildiğini öğrenmiş oluyoruz

Abstact bir sınıfı interface gibi kullanmak için uyacağımız en önemli kural, sınıf içerisindeki hangi üyeyi interface
olarak kullanmak istiyorsak o üyenin başına mutlaka abstract sözcüğünü eklemek ve erişim tipini private olarak belirtmemek zorundayız.

Eğer bir abstract classı interface gibi kullanmaya karar verirseniz, sınıf içerisindeki metotların başına abstract sözcüğünü kullanacağınız için metotlarınız mutlaka ama mutlaka erişim belirteçlerinden (access modifiers – ileride göreceğiz) public (her yere açık şekilde) olarak tanımlanmak zorundadırlar.
Bunun yanı sıra abstract metotları virtual (sanal) olarak işaretleyemeyiz çünkü abstract sınıf kalıtım verme niteliğinde olduğu için zaten sanal yapıdadırlar.

Interface gibi kullanmak istediğimiz metotlar static (durağan) olarak belirtilemezler çünkü interface mantığında static kavramına yer yok. (Kalıtım veren dinamik yapıdadır her zaman)

Şimdi tekrar Visual Studio’ya geri dönüyor ve “köpek” adında yeni bir abstract class oluşturuyoruz.Bu sınıfımız
içerisindeki metotlara dikkat ederseniz tamamının başında abstract olduğunu ve interface konusunda öğrendiğimiz
gibi metodun içinin boş yalnızca gövdesinin olduğunu göreceksiniz:

Kopek sınıfımızdan Karabaş isimli köpeğimiz için “Karabaş ” adında bir sınıf oluşturuyor ve kopek sınıfından kalıtım alıyoruz:

Sanki normal bir interface’den kalıtım almış gibi sınıfımız üyeleri otomatik biçimde doluyor ve metotlarımızın içerisini
doldurmamız için metot içerikleri genişletiliyor.

Bir abstract class ile interface’den kalıtım almanın en önemli farkı şudur: kalıtım alacak sınıf birden çok interface’den
kalıtım alabiliyorken, interface gibi davranan abstract sınıflardan en çok bir kalıtım alabilmektedir.
Yani çoklu kalıtım almak istiyorsak her zaman interface’leri tercih etmeliyiz.

Abstact sınıfların bir başka özelliği ise bir abstract sınıf hem interface gibi hem de kalıtım vermeyen normal bir sınıf
gibi davranabilir.

eki nasıl oluyor?

Abstact bir sınıf içerisindeki metotlardan hangisinin başında abstract yazıyorsa o metot interface üyesi olarak varsayılırken başında abstract yazmayan metotlar normal bir sınıf üyesi gibi davranırlar ve doğal olarak interface gibi davranmasını istediğimiz metotlar yalnızca gövde yapısındayken normal metot yapısında çalışan metotların içine istediğimiz kodları yazabiliriz.

Gelelim pratik bir örneğe…

“Tavsan” adında bir abstract sınıf oluşturalım ve içerisine abstract olan “koş”, abstract olmayan “zıpla” isimli iki metot ve tipi (string,int) önemli olmayan abstract olan ve olmayan renk ve yaş property’leri ekleyelim:

Şimdi de “Pamuk” adında bir sınıf oluşturalım ve abstract olan tavşan sınıfımızdan kalıtım alalım:

Dikkat ederseniz kalıtım aldıktan sonra yalnızca interface gibi davranan “koş” metodumuzun gövdesi “Pamuk” isimli sınıfımızın içerisinde dolduruldu.Interace gibi davranmayan “zıpla” isimli metodumuz ise aslında bir yere kaybolmadı,arka planda bizi bekliyor.

“Pamuk” isimli metodumuzdan instance alıyoruz:

Gördüğünüz gibi soyut sınıfında oluşturduğumuz metotların ikiside geldi ancak aralarındaki tek fark; interface gibi davranan metodun ne yapacağı “normal” isimli metotta “Pamuk” isimli sınıfta  belirlenirken diğeri Abstract isimli sınıfımızda baştan belirlendi.

C# Virtual ve Override Kullanımı

Merhaba Arkadaşlar,

Bugünkü konumuzda Virtual ve Override Kullanımı ile ilgili bir çrnek yapmaya çalışacağım.

Öncelikle virtual anahtar kelimesini inceleyelim; virtual sözcüğü Türkçe’ye çevrildiğinde “sanal” anlamına gelmektedir ve bir sınıfın metodunu sanallaştırarak daha sonra o sınıftan alınacak kalıtım ile metodun içeriğinde değişiklikler yapılarak yeniden kullanılmasına izin verir.

Override sözcüğü ise tam olarak Türkçe’ye çevirilemesinde bazı programcılar “ezmek,büzmek” anlamında kullanırlar.

Visual Studio’yu açalım ve C# programlama dilinde yeni bir Windows Form projesi oluşturduktan sonra “Hesaplamalar” isimli bir sınıf oluşturalım:

Bu sınıfın içerisine “Hesapla” adında virtual bir metot yazalım ve bizden iki sayı istesin ve geriye ondalık sayılar döndürmesi için double değişken değeri döndürtelim.

Hesaplamalar isimli sınıf henüz bir anlam ifade etmediği için hesapla metodunun içerisini boş bıraktık ve herhangi bir matematiksel işlem yaptırmadan sıfır döndürsün istedik,buradaki amacımız bu sınıfın kalıtım verdikten sonra bu metodu yeniden yapılandırmak olacak.
Şimdi bu metodumuzu test edebilmek için formumuza bir buton ve 2 textbox ekliyoruz:

Kullanıcı 2 sayı girecek ve metodumuz girilen sayılara göre hareket edecek,o yüzden kullanıcının butona tıklaması gerektiği için butonumuzun click eventine geçiyor ve “Hesaplamalar” sınıfımızdan instance (örnek kopya) alıyor ve MessageBox.Show() ile sınıfımızın döndüreceği sayısal değeri ekranda göstereceğiz.

Sıra geldik “Topla” isimli bir sınıf yaratmaya,bu sınıfımız “Hesaplamalar” sınıfından kalıtım alsın:

Aldığımız bu kalıtım sayesinde Topla isimli sınıfımız hesapla metodunu da devralmış oldu,yani üst sınıftaki metodu bu sınıftada kullabiliyoruz ancak hesaplamalar sınıfındaki hesapla metodumuz hiçbir işlem yapmadan sıfır döndürdüğü için burada iki sayıyı toplamasını istiyoruz.

Bunun için metodumuzun adını ve parametrelerini bire bir aynı yazıyor ve override sözcüğünü yanına ekliyoruz:

Bu sayede hesaplamalar üst sınıfındaki metodun içeriğini değiştirmiş olduk ve kendisine toplama fonksiyonu vermiş
olduk.Şimdi bu topla sınıfımızdan form üzerinde instance alarak yeniden kullanalım:

Gördüğünüz gibi hesaplamalar sınıfındaki hesapla metodu sıfır döndürürken aynı metodu kalıtım alan topla sınıfında
yeniden yapılandırarak toplama yapmasını sağladık,işte bu olaya metotların kalıtım alarak yeniden yapılandırılması ya da
sık olarak söylendiği gibi  “ezilmesi” diyoruz.

Şimdi ise ”Çarpma” işlemi için bir sınıf oluşturalım ve aynı şeyleri yapalım.

Şimdi bu carpmasınıfımızdan form üzerinde instance alarak yeniden kullanalım:

Virtual ve override konusunda dikkat etmemiz gereken iki nokta var; birincisi bir metodun kalıtım alınarak yeniden yapılandırılabilmesi için adının,dönüş tipinin (int,string gibi) ve parametrelerinin bire bir aynı olması gerekmektedir.

Bir diğer dikkat etmemiz gereken ise daha sonra override edilmeyecek metotlarımızı gereksiz yere virtual ile sanallaştırarak performans düşüşü yaşayabileceğimizi göz önünde bulundurmalıyız.Yani yok yere virtual işaretleme yapmamalıyız.

C# İnterface ve multi interface kullanımı

Merhaba Arkadaşlar,
C# OOP kullanımın bir güzelliği ile yine beraberiz.
Daha önce inheritance (kalıtım, miras) almayı görmüştük.
inheritance bize güzel bir kolaylık getirmişti. Ama bir sınıf ancak bir adet miras alabiliyordu. (insan:Canlı) yani şu şekilde bir yapı yoktu; Öğrenci:İnsan:Canlı
İşte tamda bu noktada C# ın yazılımcı abileri “İnterface” diye bir yapı ile bunu çözmüşler. İnterface türkçe kelime anlamı “Arayüz” olsa da gözümüzde canlandığı gibi  değişik ekranlarla karşılaşmayacağız.
Bu yapıda miras alırken istediğimiz kadar miras alabileceğiz.

Interface, kendisinden kalıtım alacak bir sınıfın ana hatlarını belirler.
Örneğin bir sınıfın içerisinde property’ler,metotlar vs. yer alacaksa bunları sınıfın içine yazmak yerine interface denilen yapıya yazar ve bu interface’den defalarca istediğimiz sayıda sınıfa kalıtım vererek ana hatlarını belirleriz.

Az öncede dediğim gibi interface, kendisinden kalıtım alacak olan sınıfların ana hatlarını içerir ancak interface içerisine örneğin metodun ne yapacağı yazılmaz.Yani detaycı bir yapı değildir.

Gelin şimdi Visual Studio’yu açalım ve interface konusunu biraz inceleyelim.
Bilgisayar üzerine bir proje yapalım ve konumuza “Bilgisayar” adında bir içi boş class ile başlayalım.

Şimdi bir bilgiyarın parçalarını düşünelim; İşlemci, ram, hdd, ekran kartı, ses kartı, Anakar vb. bir sürü parça bulunmaktadır.
Şimdi bu parçaların hepsini ayrı ayrı sınıflarla tanımlarsak “Bilgisayar” classımızda bu özelliklerin hepsini içeren sınıfları miras alamayız.
ama bunun yerine bu parçaları İnterface  olarak tanımlarsak?
O halde her bileşeni birer interface olarak kullanarak kalıtım alabilmek oldukça akıllıca olacaktır.

Interface’ler konusunda bilmemiz gereken ilk genel kültür konusu ise interfacelerin adının başına “I” büyük harfle  konulması gerektiğidir.Böylece Solution Explorer penceresinden bir dosyanın interface’mi yoksa class’mı olduğunu kolaylıkla alyabiliriz,bunu yapmakta zorunlu degiliz ama büyük çaplı projelerde işimize yarar.

İlk önce islemci adında public erişim belirleyicisi ile bir interface tanımlayım ve içini biraz dolduralım.

Çok basit bir manada bir interface oluşturduk ve bu interface’imiz görüldüğü gibi üç property ve bir de metot
içeriyor..Şimdi gelelim oluşturulan bir interface nasıl kullanılır görelim…

Bilgisayar classımıza geri dönüyoruz ve tıpkı daha önce öğrendiğimiz gibi sınıfımızın adının yanın iki nokta ile
interface’imizin adını yazıyoruz:

Ardından Visual Studio bize implicitly (doğrudan) mi yoksa klasik kodlama(implement) mı kalıtım alacağımızı soruyor.Bu şu demektir: işlemci interface’inden alacağımız kalıtım ile sınıfımıza gelecek olan property ve metot gibi üyelerin nereden geldiğini detaylı olup olmayacağını soruyor.Daha sade bir anlatımla her üye hangi interface’den geliyorsa başına o interface’in yolunu ve adını yazar.

Bu örneğimizde gerek duymadığımız için klasik seçeneğini  seçtikten sonra sınıfımızın property ve metotları şu şekilde geliyor:

Metotlara bakarsak sanki elle yazmış gibi otomatik bir şekilde gayet güzel geliyor ancak property’ler o kadar basit
bir şekilde gelmiyor ve Visual Studio diyor ki;

Nasıl ki interface’den gelen metodun içi boş geliyor ve içeriğini istediğin gibi yazıyorsan, interface’den gelen
property’leri de aynen o şekilde kullan..
Bu yüzden her property ve metodun içeriğinde başlangıç olarak Throw new NotImplementedException (kodlanmamış yeni bir istisnai durum yürüt – göz göre göre hata ver ki yazılımcı eksik kod yazdığının farkına varsın.

Tam da böyle bir cümlenin ardından field (alan) adında yeni bir kavramla karşılaşıyoruz.Field denen küçük yapıyı global
bir değişken olarak düşünebilirsiniz ve field’ler property’lerin kendilerine anlam kattıkları nesnelerdir.

Örneğin işlemciminizin hızını nasıl double cinsinde gösteriyorsak hemen double tipinde bir field oluşturalım:

Bu field’in başına public gibi erişim belirleyicisi koymadık çünkü bu sınıf dışında dışarıdan bu field’e erişmek için yine double tipindeki işlemci hızı property’sini kullanacağız.O yüzden field’lerin genel yazılım kodlama standartlarındaki
yeri property’ninkiyle oldukça yakın durur.

Şimdi islemcihızı isimli property’mize odaklanıyor ve get ile set adında iki yeni daha kavram görüyoruz:

Get’in Türkçe karşılığı (elde etmek), set’in Türkçe karşılığı ise (ayarlamak,tanımlamak,kurmak) şeklindedir.Get o property’den dışarıya vermek istediğimiz değeri temsil ederken, set ise o property’nin alacağı değeri temsil eder.Yani get ve set bir property’nin değer alıp verebilmesini sağlar.

İşlemcihizi property’mizin get bloğuna _hiz isimli field’ımızı tanımlıyor ve return sözcüğüyle geri döndürüyoruz.Aslında demek istediğimiz olay şudur:bu metot _hiz isimli field’in değerini geri döndürür.

Set bloğuna ise _hiz field’ımıza dışarıdan bir değer (value) yüklenebilmesini istiyoruz:

Bir property’nin get ve set kısımları oldukça esnek oldukları için istediğiniz gibi kullanabilirsiniz.Mesela hızın _hiz*10 ile
10 katını get bloğunda return diyerek geri döndürebildiğiniz gibi set bloğunu kaldırarak _hiz field’ına bir değerin verilmesini engelleyebilirsiniz.

Bir sınıf birden çok interface’den kalıtım alabilir ve aldığı her interface’den gelen property ve metotları bünyesinde barındırabilir.Bu sayede tek bir sınıftan kalıtım alabilmenin ötesine geçer..
Şimdi Ram isimli bir interface daha oluşturuyor ve içerisine bellek boyutu ile bellek tut isimli birer property ve metot yazıyoruz:

ve birde Hard disk için bir interface oluşturalım.

Şimdi “Bilgisayar” sınıfımıza gidelim ve bütün bu interfaceler den hep beraber kalıtım alalım (MULTİ İNTERFACE)

ilk başta islemci interface den kalıtım aldığımızda olduğu gibi ram ve hdd interface ileri içinde property ve metotlar yine sınıfımızın içerisine gelecektir.

Gördüğünüz gibi interface’ler içerisine ne yazdıysak hepsi birer birer tek sınıf altında gayet güzel bir şekilde geldi,biz de bu üyelere değerler verelim ve metotlarını da formumuzun load ında  çağıralım:

Olay budur.
Saygıılar.

C# Inheritance (kalıtım) Nedir ve Nasıl Kullanılır?

Merhaba Arkadaşlar,

Bir perşembe akşamı işten  yorgun argın geldim ama  “Eğitime devam” 🙂
Bugünkü konumuza object oriented programming (OOP) olmazsa olmazlarından inheritance (kalıtım) konusuna değineceğiz.
Nedir bu inheritance?
Türkçe de buna anlayacağımız dilde “Miras alma” diyebiliriz. Yani babanızdan veya dedenizden miras aldığınızı düşünün. Ama şunu da unutmak gerek babadan miras alan babaya miras veremez:)

Inheritance; bir sınıfın kendi özellikleri ve metotlarının yanı sıra kalıtım aldığı base (taban-kalıtım veren) sınıfın özellik ve metotlarına da sahip olabilmesidir,ancak kalıtım alan sınıf herhangi bir özellik veya metoda sahip olmasa da olur yeter ki üst sınıftan birşeyleri kalıtım alsın.

Hiç zaman kaybetmeden örnekler üzerinden ilerleyelim ve Visual Studio’yu açıp C# programlama dilinde yeni bir Windows Form uygulaması oluşturalım ve “İnsan” adında public bir sınıf
oluşturalım. Aynı zamanda bu sınıfın propertylerini insan özelliklerine göre verelim.

“Insan” isimli sınıfımıza gerçek bir insana ait olabilecek temel özellikleri property ve metotlar halinde yazdık.Şimdi bu sınıfımızdan new anahtar sözcüğüyle formumuzun load eventinde instance alalım ve sınıfımızın üyelerini çağıralım:

Şimdide “Öğrenci” isimli bir sınıf oluşturalım ancak bu defa bir insana ait olabilecek özellikler dışında okul, bölüm vb. bilgilerle  sınıf oluşturalım:

Yeni oluşturduğumuz “Öğrenci” classını da Formumuzun load ında çağıralım(instance  alalım) ;

Şimdi diyoruz ki öğrencide sonuçta bir insan ve bu öğrencininde bir ad, soyad ve yaşı bilgisi var?
Ee ne yapalım şimdi aynı parametreleri(property ve metotları )birde “Öğrenci” classında oluşturarak gereksiz bir kalabalık mı yapalım?

HAYIR HAYIR HAYIR!!!

Bu özellikleri yeniden yazmak yerine “Insan” isimli base sınıfımızdan kalıtım alarak insani özellikleri devralacağız yani; İnsan sınıfından “Miras” alacağızçBunun için sınıfımızın adının yanına iki nokta (:) koyarak kalıtım almak istediğimiz sınıfın adını yazıyoruz:

Ogrenci isimli sınıfımız artık derived (kalıtım alan) class,Insan isimli sınıfımız ise base class (kalıtım veren) sınıf olduğuna göre ogrenci sınıfımızdan oluşturduğumuz instance’a nokta koyarak insan özelliklerini de devraldığını görüyoruz:

Inheritance konusuyla ilgili bilmemiz gereken noktalardan birisi kalıtım alan bir sınıf yalnızca bir defalığına kalıtım alır ve Base classa kalıtım veremez.

Yararı olması dileğiyle.