Ders Hakkında ► Ders Kredi si : 2+2 ► LAB : 355 ► Değerlendirme: % 30 - Arasınav % 20 - Proje % 6 - Kısa sınav % 4 - Devam %40 - Yılsonu sınavı (Uygulamalı)
Ders İçeriği ► ►.NET Framework Mimarisi ► ► Visual Studio Geliştirme Ortamı ve Görsel Programlama ► ► Temel kavramları: değişkenler, veri türleri,kontrol yapıları ► ► Ortak Windows form kontrolleri ► ► Ortak özellikler (properties) ► ► Dizi ve karmaşık veri türleri, ► ► Metod ve fonksiyonlar ► ► Olay (event) metodları ► ► Nesne tanımlama ve DLL kulanımı ► ► Dosya ve klasör işlemleri ► ► Çoklu form kullanımı ve formlararası bilgi değişimi ► ► Hata fırlatma ve yakalama (throw-catch-finally)
Kaynaklar Kitaplar Her yönüyle C#, Sefer Algan, Pusula Yayıncılık Kitap içeriği: C# dilini yapısal olarak konsol uygulama tabanlı anlatmakta Microsoft Visual C#.NET, Memik Yanık Kitap içeriği: C# dilini görsel uygulama tabanlı anlatmakta ► C# Programlama Dili ve Yazılım Tasarımı: Cilt-2, Ahmet Kaymaz Kitap içeriği: C# dilinin daha çok veritabanı uygulamalarına yönelik anlatımı Kitap içeriği: C# dilinin daha çok veritabanı uygulamalarına yönelik anlatımıSiteler: Ders Sitesi:
.NET Nedir? ►.NET yeni bir yazılım geliştirme platformu ► WEB, Masaüstü, Gömülü, Kablosuz, Endüstriyel alanlar için çözümler ► Büyük tümleşik sistem tasarımları ► Tüm Internet uygulamalarına destek ► Yeni programlama dili : C# ► Yeni program geliştirme altyapısı ► Yeni programcılık mantığı ► Platformdan bağımsız uygulamalar
.NET ve Alternatifler Ölçütler.NET JAVA CFML PHP Derlenmiş ve Önderlenmiş Kod Var Yok Script DillerVarYokKısmiVar Nesne YönelimliVar KısmiVar Desteklenen DillerC++, C#, VB, Pyton, Perl, COBOL, Delphi vb.. 25 Dil JavaCFML ve CFScript PHP Internet Tarayıcı Uyumluluğu Var KısmiVar Açık Kaynak KoduYokVarKısmiVar
.NET Yapısal Bileşenleri ► CLR (Common Language Runtime) ► CTS (Common Type System) ► CLI (Common Language Infrastructure) ► CLS (Common Language Specification) ► FCL (Framework Class Library), namespaces ► Windows and Web Forms
.NET Teknolojileri ► Windows Formları ve Konsol ► WEB Teknolojileri ASP.NET WEB Formları WEB Hizmetleri (XML) ► SOAP (Simple Object Access Protocol) ► UDDI (Universal Description, Discovery and Integration) ► WSDL (Web Services Description Language) ► Veritabanı Teknolojileri ADO.NET ► Ve diğerleri… 8
.NET Program Akışı
.NET Bütüncül Yapısı
.NET: Programcı-Program Akışı
.NET Teknolojisi: CLR (Common Language Runtime) Kaynak Kodu Kaynak Kodu Derleyici DLL veya EXEveya DLL veya EXEveya Sınıf Yükleyici Sınıf Yükleyici JIT Anlık Derleyici JIT Anlık Derleyici Kontrollü Yerel Kod Kontrollü Yerel Kod Sınıf Kütüphane Kodları Sınıf Kütüphane Kodları Çalışma Güvenlik Kontrolü Güvenilir ve ÖnAnlık Kod Derlenmemiş Bir method çağırma CLR
.NET Özellikleri ►►C►►CLR hangi dil kodunu çalıştırdığını bilmez ►►B►►Bütün diller IL (Ortak dil) koduna çevrilir ►►I►►IL kodlar her zaman managed’tir. ►►I►►IL code ve metadata ayrılamaz, aynı dosyada beraber üretilirler ►►S►►Sadece C++.NET ile hem managed hem de unmanaged (default) kod üretilebilir ►►Ü►►Üretilen dosya PE (Portable Executable) ►►P►►PE, CLR (.NET Framework) ile çalışır ►►M►►Managed Modül: PPE Başlık : GUI veya CUI veya DLL, built-time ►►S►►Sadece IL Kod içerirse: PE başlığı ihmal edilir ►►Y►►Yerel CPU Kod: PE başlık CPU yerel makine dili kodları içerir CCLR Başlık : CLR modeli, bayraklar, Ana fonk. Adresi, module bilgileri MMetadata : Tanımlanmış veya hazır veri türleri, nesnelerin tabloları IIL Kod: Derleyici tarafından üretilen ortak kod, daha sonra CLR tarafından yerel CPU makine komutlarına çevrilir
.NET Özellikleri ► ► Metadata Intellisense çalışmasını destekler Başlık ve kütüphane dosyalarına ihtiyacı kaldırır Güvenli kod üretimine yardım eder Uzaktaki bilgisayarda nesneleri ve alanlarını oluşturmada Garbage Collector ‘ün nesneleri takibini sağlar
.NET Özellikleri ► ►.NET yüklü testi: MSCorEE.dll %windir%\system32 ► ►.NET model testi: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy ► ► IL, makine dilinden daha yüksek seviyelidir ► ► IL, nesne tabanlı makine dili olarak görülebilir ► ► IL kodlama yapılabilir ve ILAsm.exe tarafından derlenir ► ► IL kod güncel CPU’lar ile doğrudan çalıştırılamaz, gelecekte? ► ► JIT (Just In Time) derleyici IL kodları makine kodlarına çevirir
.NET Aradili ( MSIL ) Örneği.method private hidebysig instance void button1_Click(object sender, class [mscorlib]System.EventArgs e) cil managed { // Code size 60 (0x3c) // Code size 60 (0x3c).maxstack 2.locals init ([0] bool CS$4$0000) IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld class [System.Windows.Forms]System.Windows.Forms.TextBox SecureApplication.Form1::textBox1 IL_0007: callvirt instance string [System.Windows.Forms]System.Windows.Forms.Control::get_Text() IL_000c: ldstr "password" IL_0011: call bool [mscorlib]System.String::op_Equality(string, string) IL_0016: ldc.i4.0 IL_0017: ceq IL_0019: stloc.0 IL_001a: ldloc.0 IL_001b: brtrue.s IL_0030 IL_001d: ldarg.0 IL_001e: call instance string SecureApplication.Form1::answerToAllLife() IL_0023: callvirt instance string [mscorlib]System.Object::ToString() IL_0028: call valuetype [System.Windows.Forms]System.Windows.Forms.DialogResult [System.Windows.Forms]System.Windows.Forms.MessageBox::Show(string) IL_002d: pop IL_002e: br.s IL_003b IL_0030: ldstr "Error" IL_0035: call valuetype [System.Windows.Forms]System.Windows.Forms.DialogResult [System.Windows.Forms]System.Windows.Forms.MessageBox::Show(string) IL_003a: pop IL_003b: ret } // end of method Form1::button1_Click 16
C# Program Çalışma Akışı
.NET Dilleri: C# ve VB.NET //C#Program static public void Main() { StreamWriter sw=new StreamWriter("date.txt ",true); DateTime dt=DateTime.Now; string datestring=dt.ToShortDateString()+" "+ dt.ToShortTimeString(); sw.WriteLine(datestring);sw.Close(); StreamReader sr=new StreamReader("date.txt "); string filetext=sr.ReadToEnd(); sr.Close();Console.WriteLine(filetext);} ' VB..NET shared public sub Main() dim sw as StreamWriter=new StreamWriter("date.txt ",true) dim dt as DateTime=DateTime.Now dim datestring as string=dt.ToShortDateString()+" " __ +dt.ToShortTimeString() sw.WriteLine(datestring) sw.Close() dim sr as StreamRe ader=new StreamReader("date.txt ") dim filetext as string=sr.ReadToEnd() sr.Close() Console.WriteLine(filetext) end sub 18
.NET’in Zayıf Yönleri ► Daha fazla sistem kaynağı kullanma ► JIT Derleyici Geri-Mühendisliğe izin verir Obsfuscation (gizleme/örtme) araçları ► GC (Garbage Collector) ‘nin periyodik çalışmasının performansa etkisi ► Yer kaplama (.NET 3.5 SP1 =250MB) ► SSE güvenli kod desteği yok (Pentium-III) ►.NET versiyon uyumsuzlukları
SORULAR ?
2. Hafta.NET MİMARİSİ-2
Hangisi daha Performanslı Kontrollü, Kontrolsüz? Önyargı: Kontrolsüz kod daha hızlı çalışır Genellikle Kontrollü Kod Hızlıdır, Neden? ► ► JIT, kontrollü kod platformunu tanır ► ► İşlemciye ait özel komutlar kullanılır ► ► Çok işlemcili sistemleri verimli kullanır ► ► CLR dinamik kod optimizasyonu yapar ► ► Windows’ta her işlem (process) sanal belleğe sahiptir ► ► Kontrollü işlemler tek bir windows sanal belleğinde çalışabilir, daha az sistem kaynağı kullanır ► ► NGen.exe: Kontrollü kod düşük performanslı ise kullanılır
IL Kod Çalışması ► ► IL kod stack (yığın) tabanlı çalışır ► ► İşlem verileri (operands) yığına atılır (push) ► ► Sonuçlar da yığından çekilir (pop) ► ► Derlemede kayıtçılar kullanılmaz (istisna var) ► ► Doğrulama (verification) IL kodun güvenli olduğunu test eder ► ► PEVerify.exe managed kodları doğrular ► ► IL kodlar veri türü ayrımı yapmaz, yığın veri boyutunu belirler
.NET Sınıf Kütüphanesi CLR ve FCL aşağıdaki uygulamaları geliştirmeyi sağlar: ► ► WEB hizmetleri ► ► WEB formları ► ► Windows formları ► ► Windows konsol ► ► Windows hizmetleri ► ► Bileşen (component) kütüphanesi
İsimuzayları (namespaces) SystemBütün uygulamaların kullandığı temel veri türleri: int, long, float, string System.CollectionsStack, Queue, Hashtable System.DiagnosticsDebugging System.DawingWeb ve Windows formlarda kullanılan 2-Boyutlu grafik nesnleri System.IOKlasör, dosya ve stream nesneleri System.ManagementWMI ile çoklu bilgisayar yönetimi System.NetAğ haberleşmesi System.SecurityVeri ve kaynak koruması System.TextKodlama karakterleri: ASCII, Unicode System.ThreadingEşzamansız işlemcikler, kaynaklara eşzamanlı erişim
CTS (Common Type System) Görevleri Çoklu dil bütünleşmesi, tip güvenliği ve yüksek başarımlı kod çalışması için bir çerçeve Çoklu diller için nesne yönelimli bir model Farklı dillerde yazılan nesnelerin izleyeceği kurallar Ortak Tip Sisteminin Görevleri
CTS Tipleri Değer : integer, float, bool, double, ….. Sınıf : class Temsilci: delegate Dizi: array Arayüz: interface İşaretçi: pointer
CLS (Ortak Dil Tanımlamaları) Önlemler ► ► Büyük-küçük harf ayrımı ► ► İşaretsiz sayılar ► ► Çokamaçlı işleçler ► ► Değişken sayıda parametreleri destekleyen metotlar
CLR/CTS/CLS İlişkisi
3. Hafta C# Diline Giriş Kaynak İ. Karagülle: s57-s
Değişken Tanımlama int a=1; string konu=“C# Programlamaya Giriş”; decimal büyükSayı= ; byte birBayt=255; // bool birBit=true; // ya da false sbyte birbayt=-128; // long büyükTamsayı= ;
Temel Veri Türleri C# Type.Net FWork (System) type Signed?BytesPossible Values sbyteSystem.SbyteYes to 127 shortSystem.Int16Yes to intSystem.Int32Yes to longSystem.Int64Yes to byteSystem.ByteNo1 0 to 255 ushortSystem.Uint16No2 0 to uintSystem.UInt32No4 0 to ulongSystem.Uint64No8 0 to floatSystem.SingleYes4 Approximately ±1.5 x to ±3.4 x with 7 significant figures doubleSystem.DoubleYes8 Approximately ±5.0 x to ±1.7 x with 15 or 16 significant figures decimalSystem.DecimalYes12 Approximately ±1.0 x to ±7.9 x with 28 or 29 significant figures charSystem.CharN/A2 Any Unicode character (16 bit) boolSystem.BooleanN/A1 / 2 true or false
Sabit Tanımlamaları const int x = 0; public const double gConstant = 6.673e-11; private const string language = "Visual C#"; public const double x = 1.0, y = 2.0, z = 3.0; ► static kelimesi kullanılmaz ► Tanımlandığında değer atanmalı ► readonly: atama constructor ‘da veya const gibi
Basamak Hassasiyeti float x= ; x=x+5; // x=1,234568E+18 // x= decimal y= ; y=y+5;// y= decimal, 29 basamak hassasiyetine sahiptir.
Sınır Aşımı ► ► Sınır aşımı istisnai (exception) durum byte x=256; // derleme hatası, sınır aşımı byte z; z=250; z=z+10;// derlenir ancak sonuç yanlış
Sayıları Yazdırma byte x=10; MessageBox.Show(x.ToString()); int y= textbox1.Text=y.ToString(“+## (###)### ## ##”); int z=15; textbox2.Text=z.ToString(“X”); //16 lık sistem textbox3.Text=z.ToString(“X4”); //16 lık sistem
Tip Dönüştürme:Parse ► ► Parse : string->sayı string sayı1=“1234”; int x=Int32.Parse(sayı1); string sayı2=“12.345”; int y=Int32.Parse(sayı2);//derleme hatası long s; s=long.Parse(textbox1.Text);
Tip Dönüştürme:Convert ► ► Convert: string->sayı VE sayı->string string sayı1=“1234”; int x=Convert.ToInt32(sayı1); string sayı2=“12.345”; int y=Convert.ToInt32(sayı2);//derleme hatası long s; S=Convert.Tolong(textbox1.Text);
Değişkenler ► C# ‘ta yeni türler: bool, decimal ► Herşey nesne: System.Object ► object tüm değişkenlerin ortak kalıbı ► Reference ve Value Reference ve Value Reference ve Value ► Value tipler Stack (yığın) bellekte ► Reference tipler Heap (öbek) bellekte
Değişkenler Value tiplerbool, byte, sbyte, char, decimal, double, float, int, uint, long, ulong, short, ushort, struct ve enum Reference tiplerclass, interface, delegate, object ve string StackHeap x=5 int x=5; object y=1; StackHeap x=5 &yy=1 Soru: Hangisi daha hızlı?
Boxing-Unboxing ► ► Boxing: Stack alanından Heap alanına taşıma object x; int i=10; x=i; ► ► Unboxing: Heap alanından Stack alanına taşıma object x; int i=10, j=20; x=j; i=(int)x;
4. Hafta Nesne Yönelimli Programlama
Nesne Yönelimli Programlama (Object Oriented Programming) Nesne yönelimli programlama ilkeleri: Kılıflama (encapsulation) Nesne yapısı ve erişim hiyerarşisi Veri üyeleri (data field/member), fonksiyon üyeleri Çok biçimlilik (polymorphism) Aynı isimli fakat farklı parametreli metot tanımlama Kalıtım (Inheritance) Nesne türetme Nesnelerin çoklu davranış ve erişim izinleri
Nesne Özellikleri ÜYELER ► ► Alan (field): Nesne durmunu yansıtan veri ► ► Yöntem (method):Nesne fonksiyonu ► ► Özellik (property): Kontrollü Alan, ► ► Olay (event): Olay ve uyarı bildirme yolu ► ► İşleçler (operators): İşlemleri gerçekleştirmek için gerekli işaretler ► ► Dizinleyiciler (Indexers): Nesnelerin dizileri ► ► Constructor/Destructor (Varedici ve Yokedici) ERİŞİM ► ► Public: Farklı isim uzaylarından erişim ► ► Private: Nesne içi erişim ► ► Protected: Türetilen nesnelerden ► ► Internal: Geçerli projeden ► ► Protected Internal: Geçerli proje veya türetilmiş nesnelerden
Sınıf Kavram Kelimeleri ► ► this : İlgili sınıfın aynı isimli yerel değişken ve üyelerini birbirinden ayırmak için ► ► constructor: Sınıfın ismi ile aynı, ilk çalışan ► ► destructor :Constructor’ın önüne “~” işareti, son çalışan ► ► new : yeni bir nesne oluşturmak için
Değişken Kapsamları ► ► Global değişkenler metotların dışında tanımlanır, değer ataması hemen yapılmalıdır ve sınıf içindeki tüm metotlardan erişilir ► ► Yerel değişkenler metotların içinde tanımlanır, sadece metot içerisinden erişilir ► ► public static: Diğer sınıflardan da erişilir, tüm kopyalarda ortak kullanılır ► ► private: Sadece tanımlandığı sınıftan erişilir ► ► protected: Sadece ilgili sınıftan ya da o sınıftan türetilen sınıflardan erişilir ► ► internal: Sadece aynı isim uzayından
Sınıf Türleri ve Metot Erişimleri ► ► sealed : Sınıf türetilemez (son ürün) ► ► abstract: Sınıf oluşturulamaz (soyut) ► ► “:” işleci : Sınıf türetme operatörü ► ► override: Temel sınıftaki metodu bastırma ► ► virtual : Temel sınıftaki metodun bastırılması için gerekli ► ► base : Türetilen sınıftan, temel sınıftaki sanal metoda erişim
Sınıf Tanımlamaları-1 class Araç { Özellikler (properties) Renk; Motor_hacmi; Teker_adedi; Kapı_sayısı; Tip; Yolcu_adedi; İşlevler (methods) Hareket(); Yakıt_tüketme(); Fren_yapma(); Sinyal_verme(); } Properties tanımı public class araç { private string renk; public string Renk { get {return renk;} set {renk=value;} } Neden public bir değişken tanımlamadık? Public değişkenin değerinin kontrolü anlık yapılmaz, oysa set ile istenen değer sınırları kontrol edilir.
Sınıf Tanımlamaları-2 metod tanımı class X { ………….. public void Selam( string slm) { MessageBox.Show(slm); } private int Alan(int x, int y) { return x*y; } public int maliyet(int gider, int a, int b) { return gider*Alan(a,b); } }; constructor ve destructor tanımı class X { public X(){;}//constructor ~X(){;} //destructor public void Selam( string slm) { MessageBox.Show(slm); } private int Alan(int x, int y) { return x*y; } public int maliyet(int gider, int a, int b) { return gider*Alan(a,b); } };
Statik Yöntemler (static methods) class işlem { public static int topla( params int [] dizi) { int toplam=0; for(int i=0;i<dizi.Length;i++) toplam+=dizi[i]; return toplam; } class hesap { static void Main () { int i; i=işlem.topla(5,6,7,8); Console.WriteLine(“Toplam {0}”,i); //işlem iş1=new işlem(); //c.topla(4,5); }
Statik Yapıcı class word { public word() { Console.WriteLine(“Normal Yapıcı”); } static word() { Console.WriteLine(“static yapıcı”); }
Static Üye Değişkenler public class Automobile { public static int NumberOfWheels = 4; public static int NumberOfWheels = 4; public static int SizeOfGasTank{ public static int SizeOfGasTank{ get{return 15;} get{return 15;} } public static void Drive() { } public static void Drive() { }} class Program { static void Main(string[] args) { Console.WriteLine(Automobile.NumberOfWheels); }
Static Üye Örneği public class Automobile{ public static int NumberOfWheels = 4; public static int NumberOfWheels = 4; public static int objectCount = 0; public static int objectCount = 0; public Automobile() { objectCount++; } public Automobile() { objectCount++; } public static int SizeOfGasTank{ public static int SizeOfGasTank{ get{return 15;} get{return 15;} } public static int objectPop() { return objectCount; } public static int objectPop() { return objectCount; }} class Program { static void Main(string[] args) { Automobile a1=new Automobile(); Automobile a2=new Automobile(); Automobile a3=new Automobile(); Console.WriteLine(Automobile.NumberOfWheels); Console.WriteLine(Automobile.objectPop()); }
Kopya Yapıcı (Copy-Constructor) class kordXY { public int x; public int y; public kordXY(int x, int y) { this.x=x; this.y=y; } public kordXY(kordXY kord) { x=kord.x; y=kord.y; } } class static Main() { kordXY koor1=new kordXY(5,6); kordXY koor2= new kordXY(koor1); }
5. Hafta Polymorphism
Çok biçimlilik (Polymorphism) (Overloaded Methods) class İnsan { public string isim; public byte yaş; public İnsan(){;} public İnsan(string ad) { isim=ad; } public İnsan(string ad, byte yaş) { isim=ad; this.yaş=yaş; } } using System; namespace ÇokBiçimli { class Program { static void Main(string[] args) { İnsan adem =new İnsan(); İnsan havva= new İnsan(“Havva”); İnsan akif=new İnsan(“Akif”,63); Console.WriteLine( adem. yaş ); }
ÇokBiçimli Metodlar using System; using System.Collections.Generic; using System.Text; namespace ÇokBiçimli { class Program { static void Main(string[] args) { Hesap hesap1=new Hesap(100,100100); C onsole.WriteLine(hesap1.ToString()); hesap1.İsim="Attila"; //set Console.WriteLine(hesap1.İsim); //get } } class Hesap { public decimal hesNo; public decimal miktar; private string isim; public Hesap(decimal miktar, decimal hesNo) { this.miktar = miktar; this.hesNo = hesNo; } public string İsim { get { return isim ; } set { isim= value; } } public override string ToString() { return miktar.ToString()+" YTL"; }
Kalıtım-Inheritance C# ‘da kalıtım modelleri Yürütme (Implementation) Arayüz Kalıtım Yürütme Kalıtımı: Türetilen bir nesne, bastırılanlar (override) hariç tüm üye fonksiyon ve verileri temel sınıftan devralır. Arayüz Kalıtımı: Sadece belirtilen fonksiyonların arayüzleri devralınır. Fonksiyon içi işlemler devralınmaz. Yapılar sadece arayüz kalıtımı kullanırlar. Not: C#’da C++ ‘daki gibi çoklu kalıtım YOKTUR
Kalıtım-2 Sınıflarda Durum: class TüNesne : TemelNesne { // fonksiyon ve veri üye tanımları } class TüNesne : TmlNesne, IArayüz1 { // fonksiyon ve veri üye tanımları } Yapılarda Durum: class TüretilenStruct : IArayüz1 { // fonksiyon ve veri üye tanımları } C#’ da Kalıtımdan Kaçmak İmkansız class Nesne1 { // fonksiyon ve veri üye tanımları } class Nesne1 :Object { // fonksiyon ve veri üye tanımları }
Sanal Fonksiyonlar (Virtual Methods) static void main() { parent objParent = new child(); objParent.hello(); //Hello from Child. objParent.bye(); // Bye from Parent. } class parent{ virtual void hello(){ Console.WriteLine(“Hello from Parent”); } void bye(){ Console.WriteLine("Bye from Parent"); }} Class child : parent{ override void hello(){ //overriding method Console.WriteLine(“Hello from Child”); } void bye() { //hiding method Console.WriteLine("Bye from Child"); }}
Temel sınıfa erişim: base class TemelSınıf { public virtual string VirtualMethod() { return “Sanal ve temel sınıf"; }} class TürtlnSınıf : TemelSınıf { public override string VirtualMethod() { return base.VirtualMethod(); return base.VirtualMethod();}} using System; namespace baseÖrneği { class Program { static void Main(string[] args) { TemelSınıf temel1=new TemelSınıf(); TürtlnSınıf türet1=new TürtlnSınıf(); C onsole.WriteLine(temel1.VirtualMethod()); C onsole.WriteLine(türet1.VirtualMethod()); }
Fonksiyon Gizleme class TemelSınıf { public int Fonk1() { return 0; return 0;}} class TürtlnSınıf : TemelSınıf { public int Fonk1() public int Fonk1(){ return 0; return 0;}} Yandaki kod uyarı (warning) verir class TürtlnSınıf : TemelSınıf { public new int Fonk1() public new int Fonk1(){ return 0; return 0;}}
6. Hafta Soyut (Abstract) Sınıf ve Yöntemler
Abstract Sınıflar ve Metotlar ► abstract sınıf, soyuttur ve örneği oluşturulamaz ► abstract sınıf ancak türetilerek çoğaltılır ► abstract metot, soyuttur ve kod içermez ► abstract metot, türetilen sınıfta override edilir ► abstract metot, doğal olarak sanaldır (virtual)
Abstract Sınıf ve Metot Uygulaması abstract class araç { private string mesaj=“Depo Dolu”; public byte yaş; public string yakıtDoldur(){ return mesaj;} public abstract int hızOku(); } using System; Namespace abstractÖrneği { class Program { static void Main(string[] args) { araç araç1=new araç(); otomobil oto1=new otomobil(); C onsole.WriteLine(oto1.hızOku(); C onsole.WriteLine(oto1.yakıtDoldur()); } class otomobil:araç class otomobil:araç{ public otomobil(){hız=100;} private int hız; public int hızOku(){return hız;} }
Ödev ► protected ► internal ► protected internal ► sealed
Arayüzler: Interfaces ► Arayüzler sadece metot, özellik (property), dizinleyici (indexers) ve olayları (event) tanıtmak içindir ► Tanıtımda herhangi bir çalışan kod eklenemez. ► Bir arayüz hiçbir zaman başlatılamaz ► Yapıcı (Constructor) fonksiyonuna sahip olamaz ► Üyeleri,doğal olarak public tir, static veya virtual olarak tanıtılamaz ► Arayüzler farklı nesneler için ortak kalıptır
Arayüz Örneği public interface IBankaHesabı { void ParaYatırma(decimal miktar); bool ParaÇekme(decimal miktar); decimal B akiye {get;}} public class VadeliHesap : IBankaHesabı { private decimal bakiye; public void ParaYatırma(decimal miktar) { bakiye += miktar; } public bool ParaÇekme(decimal miktar) { if (bakiye >= miktar) { bakiye -= miktar; bakiye -= miktar; return true; return true;} Console.WriteLine(“Para Çekimi Yapılamadı"); return false; } public decimal Bakiye { public decimal Bakiye { get { return bakiye; } } public override string ToString() { public override string ToString() { return String.Format(“Bakiye= {0:c}", bakiye); }} class Program { static void Main() { IBankaHesabı vadeli = new VadeliHesap(); vadeli.ParaYatırma(200); vadeli.ParaÇekme(100); Console.WriteLine(vadeli.ToString()); }
İşleç Aşırı Yüklemsi (operator overloading) int a=3; int b=4; int c=a+b; class elma{ ….. } static void main() { elma e1=new elma(); elma e2=new elma(); elma e3=new elma(); e3=e1+e2;//? }
İşleç Aşırı Yüklemesi: Örnek class Karmaşık { private double mgerçek; private double msanal; public Karmaşık (double a, double b) { mgerçek=a; msanal=b; } public Karmaşık (Karmaşık a) { mgerçek=a.gerçek; msanal=a.Sanal; } public double gerçek { get{ return mgerçek;} set{ mgerçek=value;} } public double sanal { get{ return msanal;} set{ msanal=value;} } public void Yazdır( ) { if(msanal>0) Console.WriteLine(“{0} +j{1}”,mgerçek,msanal); else Console.WriteLine(“{0} -j{1}”,mgerçek,msanal); } public static Karmaşık operator+(Karmaşık kar1, Karmaşık kar2) { double GerçekTop=kar1.gerçek+ kar2.gerçek; double SanalTop=kar1.sanal+kar2.sanal; return new Karmaşık(GerçekTop,SanalTop); } static void Main() { Karmaşık k1=new Karmaşık (-10,9); Karmaşık k2=new Karmaşık(7,3); Karmaşık k3=k1+k2; k3.Yazdır(); }
7. Hafta Diziler ve ArrayList
Dizi Tanımlama ve Kullanma ► Tek Boyutlu diziler int [] dizi=new int[10]; int [] dizi; dizi=new int[10]; string []dizi={“Sakarya”,”Üniversitesi”,”Teknik”}; int[]dizi={1,2,3}; char [] s=“merhaba”; int[] dizi=new int[giriş];
Çok Boyutlu Diziler ► Düzenli Çok Boyutlu Dizi int [,]dizi=new [3,3]; int [,] dizi={{1,2},{3,4},{10,11}}; int [,,]dizi=new dizi[5,5,5]; ► Düzensiz Çok Boyutlu Diziler (Jagged Arrays) int [][] dizi=new int[3][]; //satır sayısı belli ► dizi[0]=new int[3]; ► dizi[1]=new int[4]; ► dizi[2]=new int[2];
Düzensiz Dizi İşlemleri class jagged { static void Main() { int [][]dizi=new int [3][]; dizi[0]=new int []{1,2,3}; dizi[1]=new int []{6,7,8,9}; dizi[2]=new int []{10,11}; for(int i=0;i<dizi.GetLengt h (0);i++) for(int j=0;j<dizi[i].GetLengt h (0);j++) for(int j=0;j<dizi[i].GetLengt h (0);j++) Console.WriteLine("dizi[{0}][{1}]={2}",i,j,dizi[i][j] ) ; }}
System.Array Sınıfı Array.Copy () Array.Sort() Array.BinarySearch() Array.Reverse() Array.Clear()
Komut-satırı parametrelerini Kullanma class CommandLine { static void Main(string[] args) { System.Console.WriteLine("Number of cmd-line pars = {0}", args.Length); foreach (string s in args) { System.Console.WriteLine("Number of cmd-line pars = {0}", args.Length); foreach (string s in args) {System.Console.WriteLine(s);}}}
8. Hafta Temsilciler(Delegates)
Temsilciler ► Metotları diğer metotlara parametre olarak kullandırmayı sağlar ► Metotlara referansta bulunur, adreslerini tutarlar ► Temsilciler System.Delegate temel sınıfından türetilir TANIMLAMA: delegate void İşlem (uint x); delegate double İkiParametreli (long i, long k); delegate string DizgeAL();
Temsilci Örneği-Basit using System; class Temsilciler { public delegate void MetotTemsilci(); public static void metot1() { Console.WriteLine(“metot1”); } public static void metot2() { Console.WriteLine(“metot2”); } public static void Main() { MetotTemsilci temsilci=new MetotTemsilci(metot1); temsilci(); temsilci=new MetotTemsilci(metot2); temsilci(); }
Temsilciler-İleri Seviye using System; class Temsilciler { public delegate void KomutMetodu(); public struct KomutYapısı { public KomutMetodu KomutMetot; public string Komut; } public static void Dir() { Console.WriteLine(“Dosyalar listelenir”); } public static void Edit() { Console.WriteLine(“Edit komutu çalıştı”); }} public static void Main() { KomutYapısı[] komutlar=new KomutYapısı[2]; komutlar[0].Komut=“dir”; komutlar[0].KomutMetot=new KomutMetodu(Dir); komutlar[1].Komut=“edit”; komutlar[1].KomutMetot=new KomutMetodu(Edit); string GirilenKomut; while(true) { Console.Write(“DOS:>”); GirilenKomut=Console.ReadLine(); for(int i=0;i<komutlar.Length;i++) { if(GirilenKomut==komutlar[i].Komut) komutlar[i].KomutMetot(); }
9. Hafta Olaylar(Events)
10. Hafta İstisnai Durum Yapıları (Exception Handling)