1. .NET Framework ve C#’a Giriş
C# Akademi
(http://www.csharpnedir.com) 1
2. Tarihçe
C Dili ve Yapısal Programlama
C++ ve Nesne Yönelimli Programlama
Java’nın Doğuşu
İnternetin Gelişimi
..ve C#’ın doğuşu
(http://www.csharpnedir.com) 2
3. Neden C#
Öğrenilmesi kolay
Nesne yönelime tam destek
Yüksek verim
Güç ve kolaylık arasındaki denge
XML desteği
Yönetilemeyen kod yazma desteği
Olay tabanlı programlamaya tam destek
C# modern bir dil.
SONUÇ : C# güzel bir dildir
(http://www.csharpnedir.com) 3
4. Neler yapabiliriz ?
Konsol Uygulamaları
Windows form tabanlı uygulamalar
ASP.NET ile Web formları
Web servisleri
Mobil uygulamalar
Windows servisleri
DLL(!) geliştirme
(http://www.csharpnedir.com) 4
5. .NET ne işe yarar ?
Web site Arkaplan
Uyg.
Mega
Servis
Web site Arkaplan
Uyg.
Web site Mega
Servis
(http://www.csharpnedir.com) 5
6. Eski zorluklar neler ?
Bir çok geliştirme ortamı var
(COM,MFC,ATL,VB,VC++)
COM’un zorlukları
DLL Cehennemi
Kurulum zorlukları.Register
zorunluluğu
(http://www.csharpnedir.com) 6
7. .NET in tasarım amacı
DLL cehenneminden kurtuluş.
Kolay kurulum - XCOPY
COM Modelinin tasarım zorluğunu
aşma
Daha hızlı ve kolay geliştirme modeli
XML ve SOAP ile web servislerine
kolay erişim desteği
Interneti daha iyi programlama ve
cihazdan bağımsız geliştirme
yapabilme beceresi
Platform ve dil bağımsızlığı
(http://www.csharpnedir.com) 7
8. .NET Framework Bileşenleri
İki ana bileşen
FCL – Framework Class Library
CLR – Common Language Runtime
(http://www.csharpnedir.com) 8
9. .NET Framework
VB C++ C# JScript …
CLS Standartları
Visual Studio.NET
Visual Studio.NET
ASP.NET: Web Servisi Windows
Windows
ve Web Formları Formları
Forms
ADO.NET: Data ve XML
Temel Sınıf Kütüphanesi
CLR - Common Language Runtime
(http://www.csharpnedir.com) 9
10. CLR : Çalışma Modeli
Kaynak VB C# C++
kod Yönetilmeyen
Derleyici Derleyici Derleyici Bileşenler
Ara Assembly Assembly Assembly
IL Kodu IL Kodu IL Kodu
kod
CLR - Common Language Runtime
JIT Derleyicis
Doğal(Native) Kod
İşletim Sistemi Servisleri
(http://www.csharpnedir.com) 10
11. Özetle .NET Derleme Modeli
kod.cs csc.exe IL(aradil) İlk derlemeden sonraki
derlemeler ön bellekten
okunacağı için hız artacaktır.
KOD X86
Makine
Uygulama CLR JIT Kodu
METADATA
(http://www.csharpnedir.com) 11
12. .NET Framework kütüphanesi
Unified Classes
Web Classes (ASP.NET)
Controls, Caching, Security, Session, Configuration etc
Data (ADO.NET) Windows Forms
ADO, SQL,Types etc Design, Cmpnt Model etc
Kaynak : MSDN
XML Classes Drawing Classes
XSLT, Path, Serialization etc Drawing, Imaging, Text, etc
System Classes
Collections, Diagnostics, Globalization, IO, Security,
Threading Serialization, Reflection, Messaging etc
NYP tasarım modeli ve hiyerarşik yapıdaki kütüphane
(http://www.csharpnedir.com) 12
14. CLR – Common Language Runtime
JIT derleyicileri ile anında derleme
Hafıza(memory) ve kanal(thread )yönetimi
IL’e derleme ve çalıştırma
Çoklu CPU desteği için optimizasyonlar
ILDasm.exe – Önemli bir araç
Managed Code (CLR nin çalıştırdığı kod)
Ngen.exe utility (Doğal koda dönüştürme
aracı – Intel 8086-)
(http://www.csharpnedir.com) 14
15. Yönetilen Kodda neler var?
EXE kodu PE formatındadır *Portable Executable
Yönetilen EXE de bulunanlar:
1. PE Başlığı
2. CLR Başlığı
3. Metadata
Projedeki bütün türler
Tür güvenliği garantisi
Referans sayımı.(GC)
4. IL Kodu
MSCOREE.dll sistem DLL
inde bulunan _CorExeMain
fonksiyonu ile IL kodu
çalıştırılır
(http://www.csharpnedir.com) 15
16. Çöp toplama – Garbage Collection
Siz hiçbir zaman çöp toplamaya layık biri değilsiniz? .NET
arkanızda bıraktığınız çöpleri sizin yerinize toplar!
(http://www.csharpnedir.com) 16
17. CTS – Common Type System
Sınıflar ve Yapılar.
Veri türlerindeki elemanlar
Field(Alan)
Metod
Property(Özellik)
Event(Olay)
Bütün türlerin atası:
System.Object
(http://www.csharpnedir.com) 17
18. C# tipi Boyut .NET tipi Aralık
Türler byte
(byte)
1 Byte 0-255
Referans ve değer türleri char 2 Char Unicode
char
Reference türleri heap’te saklanır
bool 1 Boolean True/false
Değer tipleri stack’te saklanır
sbyte 1 Sbyte -128/127
Bütün türler System.Objects’ten
türetilmiştir short 2 Int16 -32K/+32K
İki veri türü arasında dönüşüm ushort 2 Uint16 0-65K
yapabilir. Burak bey anlatacak. int 4 Int32 -2B/+2B
uint 4 Uint32 0-4B
GC ile referans sayımı yapılır.
float 4 Single IEEE float
double 8 Double IEEE
double
decimal 12 Decimal 28 digits
fixed
precision
long 8 Int64 +-9e16
ulong 8 UInt64 0-1.8e17
(http://www.csharpnedir.com) 18
19. CLS - Common Language Specification
Ortak Dil Standartları
CLR/CTS’nin altkümesi
Sınırlı sayıda tür.
Sınırlı özellikler
Diller arası uyumluluk
VB.NET, C#.NET, J#.NET,
Perl,Delphi,Cobol,Eiffel vs.
Diller arası uyumluluk istenmiyorsa
CLS standartları ihmal edilebilir.
(http://www.csharpnedir.com) 19
20. CLI - Common Language Infrastructure
CLI - ECMA – 335
http://www.ecma-
international.org/publications/standa
rds/Ecma-335.htm
Mono projesi (Linux)
www.go-mono.com
DotGNU Projesi (FreeBSD,Solaris,Mac OS)
www.dotgnu.org
(http://www.csharpnedir.com) 20
21. Assembly Nedir?
“Bir Assembly bir yada daha
fazla veri türü tanımını ve
kaynakları içeren .NET
dosyasıdır.” – Richter
Her assembly manifest içerir.
Manifest şunları içerir :
Assembly’de ki dosyaların
isimleri
Assembly versiyonu
Dil seçeneği-Culture
Türler
Geliştirici-Yayıncı
Application Domain Kavramı
(http://www.csharpnedir.com) 21
22. Assembly Nedir?
CLR Assembly’ler üzerinde
çalışır. Manifest’e bakarak
yüklemeyi yapar, ardından alt
dosyaları yükler.
.GIF ve .JPG gibi kaynakları
içerebilir.
Assembly EXE yada DLL
olabilir.
“Assembly : Mantıksal EXE veya
DLL”
(http://www.csharpnedir.com) 22
23. Assembly Yükleme
Strongly Named Assemblies (Public
Assembly)
(GAC Kurulumu)
Private Assemblies
(XCOPY Kurulum)
Tek farkı kurulumla ilgilidir.
(http://www.csharpnedir.com) 23
24. Public Assembly
Global düzeyde kullanıma hazır
Tekil özellikleri:
Dosya Adı
Versiyon numarası
Culture ID
Public Tekil ID
Tekil ID ile imzalanmalıdır
Use: SN –k keyfile.keys
Keyfile.snk dosyası örneği.
İmzalandıktan sonra :
GAC’a (Global Assembly Cache)
atılabilir
GAC’ın adresi genellikle :
c:windowsAssemblyGAC
Bu işlem gacutil.exe ile yapılabilir.
Yada GAC dizinine kopyalama ile
(http://www.csharpnedir.com) 24
25. Private Assemblies
Tekil ID yok
Uygulama dizininde
bulunur
XCOPY kurulumu
yapılabilir. Uygulama ile
taşınmalıdır.
(http://www.csharpnedir.com) 25
26. Visual Studio.NET’in getirileri
Pratik geliştirme sağlar. .NET
ortamında geliştirme yapmak için
zorunlu değildir.
C# ve VB için çok benzer ortamlar
GUI tasarımı ve gelişmiş hata
ayıklama(debugging)
ASP.NET,Web ve Windows
servisleri kolayca oluşturulur.
Kolay veritabanı erişim teknikleri
Global yada lokal XML dosyalarını
oluşturma ve düzenleme
(http://www.csharpnedir.com) 26
27. C# Komut Satırı Derleyicisi – csc.exe
VS.NET’e ihtiyaç duymadan her türlü uygulamayı geliştirmemiz mümkündür.
Hata ayıklama desteği
csc /t:winexe /debug kaynak.cs
Hata Ayıklama(Debug) Örneği
(http://www.csharpnedir.com) 27
30. Merhaba Dünya
C# ile yazılan kaynak dosyaların uzantıları
cs dir.
Kaynak kodu komut satırından derlemek
için, csc.exe programı kullanılır.
csc ilk_program1.cs
(http://www.csharpnedir.com) 30
31. Merhaba Dünya
Bir C# programının en temel özellikleri
C# %100 nesne yönelimlidir. Herşey bir sınıf nesnesidir.
Main() işlevi bir programın çalışmaya başladığı noktadır.
static void Main()
Kaynak kodlar mutlaka bir sınıf bildirimi içinde yapılır.
Class ilk_program1
{
...
}
Bütün C# programları en az bir sınıf bildirimi içermelidir.
(http://www.csharpnedir.com) 31
32. Merhaba Dünya
Bir C# programının en temel özellikleri
Tüm kod satırları ; ile biter.
System.Console.WriteLine(“Merhaba Dünya”);
Sınıflar ve işlevler küme parantezleri içine yazılır. { }
İş yapan elemanlara metod denilir. NET sınıf
kütüphanesi binlerce metod içerir.
(http://www.csharpnedir.com) 32
33. Merhaba Dünya
using System ;
using anahtar sözcüğü ile uygulamlarımıza isim
alanlarını ve alt isim alanlarını ekleyebilir ve böylece ;
System.Console.WriteLine(“ Merhaba Dünya “ );
ifadesi yerine, bu ifadeyi dahada kısaltarak aşağıdaki
formu kullanabiliriz.
Console.WriteLine(“ Merhaba Dünya “ );
(http://www.csharpnedir.com) 33
34. Temel Veri Türleri
Temel Veri Türleri
Önceden Kullanıcı
Tanımlanmış Tanımlı
Veri Türleri Veri Türleri
Değer Tipi Referans Tipi
(http://www.csharpnedir.com) 34
35. Değişken Nedir?
Değişkenler içlerinde farklı türlerde veri saklayabildiğimiz
bellek alanlarının programlamadaki karşılığıdır.
(http://www.csharpnedir.com) 35
36. Bellek Alanları
Stack
Heap
Register
Static
Constant
Ram Olmayan
Bölge
(http://www.csharpnedir.com) 36
37. Bellek Alanları
Stack;
RAM’de yer alır.
Değer Tiplerinin tutulduğu yer.
Stack’ta tutulacak verilerin çalışma zamanı öncesinde ne
kadar yer kaplayacağının bilinmesi gerekir.
(http://www.csharpnedir.com) 37
38. Bellek Alanları
Heap;
RAM’de yer alır.
Referans türlerinin tutulduğu yer.
Bütün C# nesneleri bu bölgede tutulur.
Tutulacak nesnenin derleyeci tarafından bilinmesi
zorunlu değildir.
Tutulacak veriler çalışma zamanında dinamik olarak
yaratılır.
İşlem hızı stack’a göre daha yavaştır.
Heap’te tutulacak bir nesne oluşturmak için
new anahtar kelimesini kullanırız.
(http://www.csharpnedir.com) 38
39. Bellek Alanları
Register;
İkincil Önbellek’te yer alır.
Sadece derleyici erişir.
Programcının doğrudan erişme hakkı yoktur.
Stack ve Heap’e göre çalışma mekanizması çok daha
hızlıdır.
(http://www.csharpnedir.com) 39
40. Bellek Alanları
Static;
Bellekteki herhangibir sabit bölge.
Veri, programın çalışması boyunca saklanır.
Static veriler için static anahtar sözcüğü kullanılır.
(http://www.csharpnedir.com) 40
41. Bellek Alanları
Constant;
Değişmesi istenmeyen veriler için kullanılır.
Yanlız okunabilir amaçlı olduklarından bazen ROM’da
tutulurlar.
(http://www.csharpnedir.com) 41
42. Bellek Alanları
RAM Olmayan Bölge;
Disk alanları.
Kalıcı olması istenen veri türleri için kullanılır. Örneğin
veritabanlarının tutulduğu disk bölgeleri.
(http://www.csharpnedir.com) 42
43. Değişken Tanımlama
Programın çalışması süresince kullanacağımız verileri
depolamak için değişkenleri kullanırız.
Değişkenleri, ilk değer ataması
yapmadan kullanmak yasaktır.
Değişken tanımlamaları kaynak
kodun herhangibir yerinde olabilir.
Virgül kullanarak bir satırda birden
fazla değişken aynı türden olmak
koşuluyla tanımlanabilir.
double a,b,c;
(http://www.csharpnedir.com) 43
44. Değişken İsimlendirme
Değişken isimleri büyük küçük harf duyarlıdır.
int Ucret;
int UCRET;
Değişken isimleri nümerik karakterler ile başlayamaz.
İnt 1Ucret;
Değişken isimlerinde boşluk karakteri kullanılamaz.
int ucret Artisi;
(http://www.csharpnedir.com) 44
45. Değişken Faaliyet Alanları
Bir sınıfın üye alanı olarak tanımlanmış değişken her
zaman sınıfın faaliyet alanı içindedir.
Yerel bir değişken tanımlandığı blok arasında kaldığı
sürece faaliyet alanındadır.
For döngüleri gibi döngü bloklarında tanımlanan
değişkenler döngünün dışında geçersizdir.
(http://www.csharpnedir.com) 45
46. Sabit (Constant) Tanımlanması
Bir program boyunca değerinin değişmeyeceğini
düşündüğümüz veriler Constant (sabit) olarak tanımlanır.
Sabit değişkenlerin değerlerini
programın çalışması sırasında
değiştirmeye çalışmak hataya yol
açar.
Sabitlere ilk değer verilirken sabitler
kullanılır.
Sabitler içsel tasarım olarak static
olduklarından, ayrıca static olarak
tanımlamaya çalışmak hataya yol
açar.
(http://www.csharpnedir.com) 46
48. Değer Türleri Arası Atama
İki değer tipi nesnesi birbirine
eşitlenirken, değişkenlerde
saklanan değerler kopyalanarak
eşitlenir ve bu durumda iki yeni
bağımsız nesne elde edilmiş olur.
Yani birisinin değerini değiştirmek
diğerini etkilemez.
(http://www.csharpnedir.com) 48
49. Değer Türleri için Varsayılan Değerler
Veri Tipi Varsayılan Değer
bool False
byte 0
char ‘0’
decimal 0.0M
double 0.0D
enum Enum sabitindeki, 0 indisli değer.
float 0.0F
Int 0
long 0L
SByte 0
Short 0
Struct Yapıdaki tüm değer tipleri varsayılan değer,
tüm referans tipleride null değere atanır.
Uint 0
Ulong 0
UShort 0
(http://www.csharpnedir.com) 49
50. Değer Türleri
Veri
CTS Karşılığı Açıklama Max Min
Tipi
sbyte System.Byte 8 bit işaretli tamsayı -128 127
short System.Int16 16 bit işaretli tamsayı -32.768 32.767
int System.Int32 32 bit işaretli tamsayı -2.147.483.648 2.147.483.647
long System.Int64 64 bit işaretli tamsayı -9.223.372.036.854.775.808 9.223.372.036.854.
775.807
byte System.Byte 8 bit işaretsiz tamsayı 0 255
ushort System.UInt16 16 bit işaretsiz tamsayı 0 65.535
uint System.UInt32 32 bit işaretsiz tamsayı 0 4.294.967.295
ulong System.UInt64 64 bit işaretsiz tamsayı 0 18.446.744.073.70
9.551.615
float System.Single 32 bit tek kayan sayı +/- 1,5 x 10^-45 +/- 3,4 x 10^38
double System.Double 64 bit çift kayan sayı +/- 5 x 10^-324 +/- 1,7 x 10^-308
decimal System.Decimal 128 bit ondalıklı sayı +/- 1,5 x 10^-28 +/- 7,9 x 10^28
bool System.Boolea Doğru yada yanlış true / false
n
char System.Char Karakterleri temsil eder 16- Unicode Karakterleri
(http://www.csharpnedir.com) 50
51. Referans Türleri
Önceden tanımlanmış iki referans türü vardır.
string veri türü object veri türü
(http://www.csharpnedir.com) 51
52. Tür Dönüşümü
Farklı türden değişkenleri aynı ifade içerisinde
kullanbilmek için tür dönüşümleri yapılır
Bilinçli Tür Dönüşümü Bilinçsiz Tür Dönüşümü
Büyük Tür Küçük Tür Büyük Tür Küçük Tür
Yasaklanmıştır
Küçük Tür Büyük Tür Küçük Tür Büyük Tür
(http://www.csharpnedir.com) 52
53. Bilinçsiz Tür Dönüşümü
Küçük TürBüyük Tür;
Tür dönüşümünde her hangibir veri kaybı olmaz.
Fazla olan bitler 0 ile beslenir.
(http://www.csharpnedir.com) 53
54. Bilinçsiz Tür Dönüşümü
Küçük TürBüyük Tür;
Byte türleri arasında aritmetiksel işlemler yapılırken
sonuç mutlaka int yada daha büyük türden bir değişkene
aktarılmalıdır.
byte a=5;
byte b=3;
byte c=a+b; Cannot implicitly convert type ‘int’ to ‘byte’
(http://www.csharpnedir.com) 54
55. Bilinçsiz Tür Dönüşümü
Küçük TürBüyük Tür;
Tür Dönüşebileceği Tür
sbyte short,int,float,long,double,decimal
byte short,ushort,int,uint, long,ulong,float,double,decimal
short int,long,float,double,decimal
ushort int,uint,long,ulong,float,double,decimal
int long,float,double,decimal
uint long,ulong,float,double,decimal
long, ulong float,double,decimal
char ushort,int,uint,long,ulong,float,double,decimal
float double
(http://www.csharpnedir.com) 55
56. Bilinçli Tür Dönüşümü
Derleyicinin izin vermediği tür dönüşümlerinde yapılır.
Veri kayıplarına sebep olabilir.
Küçük Tür Büyük Tür dönüşümleri, bilinçsiz türde
olduğu gibidir.
Dönüşümler için tür dönüşüm operatörleri kullanılır.
(http://www.csharpnedir.com) 56
57. Bilinçli Tür Dönüşümü
Büyük TürKüçük Tür;
Bilinçli olarak büyük türler, küçük türlere çevrilirken
veri kayıpları olabilir.
(http://www.csharpnedir.com) 57
58. Checked ve Unchecked Anahtar Sözcükleri
Bilinçli tür dönüşümleri sonucu oluşabilecek veri
kayıplarının önüne geçmek için, tür dönüşümlerinin yer
aldığı kodları checked blokları içine alırız. Böylece,
exception türetilmesi sağlanır.
Checked bloklarında tanımlanan değişkenler blok dışında
tanınlanamazlar.
Checked kod bloğunun içinde veri kayıplarına neden
olabilecek durumların göz ardı edilmesi gerekirse
unchecked blokları kullanılır.
(http://www.csharpnedir.com) 58
59. Boxing (Kutulama)
Bir nesnenin object türüne bilinçli yada bilinçsiz
dönüştürülmesidir. Stack bölgesinde tutulan veri bit
olarak heap alanına kopyalanır.
(http://www.csharpnedir.com) 59
60. UnBoxing (Kutuyu Kaldırmak)
Heap bölgesindeki nesnenin değerini bit olarak stack bölgesine kopyalar.
Unboxing işlemine tabi tutulacak veri önceden boxing işlemine
tutulmuş olmalıdır.
Unboxing işlemi sırasında doğru tür dönüşümü kullanılmalıdır.
(http://www.csharpnedir.com) 60
61. Convert.ToString Metodu
ToString metodu System isim alanındaki
Convert sınıfına ait bir metottur.
Convert sınıfının diğer metodlar genellikle, string
türde verileri, diğer veri türlerine dönüştürmek
için kullanırız.
(http://www.csharpnedir.com) 61
63. Operatör Nedir?
Önceden tanımlanmış bir takım matematiksel yada
mantıksal işlemleri yapmak için kullanılan özel karakter yada
karakterler topluluğudur.
(http://www.csharpnedir.com) 63
65. Operatör Önceliği
Öncelik Operatör
Birincil Öncelik x.Y(nesne erişim operatörü), f(x), dizi[x], x++, x--,
new, typeof, checked, unchecked
Unary Operatörler +, -, !, ~, ++x, --x, (tür)x
Çarpma Bölme Operatörleri *, /, %
Toplama Çıkarma Operatörleri -, +
Kaydırma Operatörleri <<, >>
İlişkisel ve Tür Testi Operatörleri <, >,<=, >=, is, as
Eşitlik Operatörleri ==, !=
Mantıksa ve &
Mantıksal Özel veya ^
Mantıksal Veya |
Koşullu ve &&
Koşullu veya ||
Koşul Operatörü ?:
Atama ve işlemli atama Operatörleri =, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |=
(http://www.csharpnedir.com) 65
66. Aritmetik Operatörler
Toplama ve Çıkarma ;
int i =50+40;
float f=12.56f + 11.4f;
Bölme ve Çarpma ;
float f = 50f / 40f; sonuç float değişkene aktarıldığından 1,25
int d = 50 / 40; sonuç int değişkene aktarıldığından virgülden
sonraki kısım atılır. Sonuç 1 olur.
% Kalan
c = 10 % 3; Birinci operand’ın ikinci operanda bölümünden
kalanı verir. Sonuç 1 dir.
(http://www.csharpnedir.com) 66
68. Aritmetik Operatörler
++ Arttırma ve -- Azaltma
int a=10;
int b;
int c;
b=a++; İlk önce atama b=10
Sonra arttırma a=11
c=++a; Önce arttırma a=12
Sonra atama c=12
(http://www.csharpnedir.com) 68
71. Karşılaştırma Operatörleri
as operatörü
Uygun türler arasındaki dönüşümü sağlar.
Üretilen değer referans türündendir.
Dönüşüm işlemi başarısız olursa null değer üretilir.
object o=“50”;
string s=o as string;
is operatörü
Çalışma zamanında bir nesnenin türünün operand ile verilen türe
uyumlu olup olmadığını kontrol eder.
Üretilen değer true yada false olur.
int i=50;
bool b1 = i is int; true
bool b2 = i is double; false
(http://www.csharpnedir.com) 71
75. Bitsel Operatörler
Sayıların bütünü değil, sayıları oluşturan bitler
üzerinde kullanılır.
Sadece tam sayılarda kullanılır. Gerçel sayılarda
kullanılamaz.
Bitlerin durumlarını öğrenmek, bitleri 0 yada 1
yapmak gibi alt seviye işlemlerde kullanılırlar.
(http://www.csharpnedir.com) 75
76. Bitsel Operatörler
BİTSEL DEĞİL ~ Operatörü;
Bit Sonuç 1 leri 0, 0 ları 1 yapar. Bu aynı
zamanda sayının tümleyeninin
1 0 bulunmasıdır.
0 1
byte a = 255; 11111111
byte b= (byte) ~ 255; ~ 11111111
00000000
(http://www.csharpnedir.com) 76
77. Bitsel Operatörler
BİTSEL VE & Operatörü;
1nci Bit 2 nci Bit Sonuç Her iki bit 1 ise, 1 döner. Aksi
halde 0 döner.
1 1 1
1 0 0
0 1 0
0 0 0
byte a = 145; 10010001
byte b=73; 01001001
int c=(byte) ( a & b); &
00000001
(http://www.csharpnedir.com) 77
78. Bitsel Operatörler
BİTSEL VE & Operatörü;
Bir sayıyı bütün bitleri 1 olan bir sayı ile bitsel ve işlemine
sokmak, sayının değerini değiştirmez. Çünkü
1 bitsel ve işleminde etkisiz elemandır.
Bir sayıyı bütün bitleri 0 olan bir sayı ile bitsel ve işlemine
sokmak sayının değerini 0 yapar. Çünkü
0 bitsel ve işleminde yutan elemandır.
(http://www.csharpnedir.com) 78
79. Bitsel Operatörler
BİTSEL VEYA | Operatörü;
1nci Bit 2 nci Bit Sonuç Bitlerden en az birisi 1 ise,
1 döner.
1 1 1
1 0 1
0 1 1
0 0 0
byte a = 145; 10010001
byte b=73; 01001001
int c=(byte) ( a | b); |
11011001
(http://www.csharpnedir.com) 79
80. Bitsel Operatörler
BİTSEL ÖZEL VEYA ^ Operatörü;
1nci Bit 2 nci Bit Sonuç Bitlerden her ikiside farklı
ise 1 döner.
1 1 0
1 0 1
0 1 1
0 0 0
(http://www.csharpnedir.com) 80
81. Bitsel Operatörler
BİTSEL ÖZEL VEYA ^ Operatörü;
Özel veya geri dönüşümlü işlem yapar. Bir sayıyı özel veya işlemine tabi
tuttuktan sonra aynı sayı ile tekrar özel veya işlemine tabi tutmak
başlangıçtaki sayıyı verir.
byte b = 10; 00001010
byte c = 99; 01100011
c=(byte) ( c ^ b ) ; 01101001
c=(byte) ( c ^ b ) ; 01100011
(http://www.csharpnedir.com) 81
82. Bitsel Operatörler
BİTSEL SOLA KAYDIRMA << Operatörü;
Bir sayının bitlerini istenilen sayı kadar sola öteler. İlk bit her zaman 0 ile
beslenir, son bit ise ötelemeden dolayı atılır.
byte b = 10; 00001010
byte c = (byte) ( b << 1 ) ; 000010100
00010100
Sola 1 kez öteleme bir sayının 2 ile çarpılmış halini verir. 2 kez öteleme
sayının 4 katını, 3 kez öteleme sayının 8 katını, 4 kez öteleme 16 katını
verir.
(http://www.csharpnedir.com) 82
83. Bitsel Operatörler
BİTSEL SAĞA KAYDIRMA >> Operatörü;
Bir sayının bitlerini istenilen sayı kadar sağa öteler. Son bit her zaman 0 ile
beslenir, ilk bit ise ötelemeden dolayı atılır.
byte b = 137; 10001001
byte c = (byte) ( b >> 1 ) ; 010001001
01000100
Sağa bir kez öteleme, sayının yarısını verir. Ancak sayı tek sayı ise, bu
durumda, çıkan sonucun tam kısmı elde edilir. Yani 7 >> 1 = 3 olur.
(http://www.csharpnedir.com) 83
84. Atama ve İşlemli Atama
Operatörleri
= ATAMA Operatörü;
Bir değişkene herhangibir değeri atamak için kullanılır.
İŞLEMLİ ATAMA Operatörleri;
*=, +=, -=, /=, <<=, =>>, &=, ^=, |=
a*=b; a=a*b;
a+=b; a=a+b;
a-=b; a=a-b;
a<<=b a=a<<b
; ;
a^=b; a=a^b;
a/=b; a=a/b
(http://www.csharpnedir.com) 84
85. Özel Amaçlı Operatörler
?: Operatörü;
Koşullu ifadeler için kullanılır.
koşul ? doğru_değer : yanlış_değer;
str = str + ( sayi == 1 ? “ “ : “LER” );
koşul koşul yanlış ise
koşul doğru ise
(http://www.csharpnedir.com) 85
86. Özel Amaçlı Operatörler
Operatör İşlevi Örnek
() Tür Dönüştürme byte a=2;
Tür dönüşümleri için kullanılır.
Operatörü int c=(int)a;
[] Indeks Operatörü Dizi elemanlarına ulaşmak için kullanılır. int a=dizi[1];
Bir değişkenin negatif (-) yada pozitif (+) int a=10;
+ ve -
olmasını sağlar. int b=-a;
Bir sınıfın yada yapının elemanlarına Console.WriteLine
.
erişmek için kullanılır. ();
Sinif a=new
new Yeni bir nesne oluşturmak için kullanılır. Sinif();
int i=new int();
checked / unchecked
Her hangibir türe ilişkin System.Type int a=10;
typeof
sınıfı türünden bir nesne üretir. Type t1=typeof(a);
(http://www.csharpnedir.com) 86
90. if-else Karar Verme Yapısı
Kontrollü akış yapmamızı sağlar.
if (ifade) bool bir sonuç üretmeli !
deyim1
else
if (ifade)
deyim2
deyim1
else ifadesi olmayan yapı
(http://www.csharpnedir.com) 90
91. Birleşik if-else Blokları
İf bloklarında birden fazla deyim çalışabilir.
İf (ifade)
{
deyim1 İf (ifade)
deyim2 {
} deyim1
else deyim2
{ }
deyim3
deyim4
}
(http://www.csharpnedir.com) 91
92. Merdiven şeklindeki if-else Blokları
Çoklu koşuldan birini seçme durumu:
if (ifade1)
deyim1
else if(ifade2)
deyim2 Her bir if bloğunda birden fazla
else if(ifade3) deyim olabilir?
deyim3
else
deyim4
(http://www.csharpnedir.com) 92
93. İçiçe if-else Blokları
Gerçek hayatta en çok kullanılan biçim
if (kosul1)
{
if (kosul2)
deyim1
else
{
deyim2
deyim3
}
}
else
deyim4
Okunabilirlik açısından süslü parantez kullanmak gerekir.
(http://www.csharpnedir.com) 93
94. Tehlikeli Durum - 1
Gözden kaçan durumlar olabilir:
if (ifade1);
deyim1
Acemi programcıların gecelerini
alabilecek bir durumu.
int a = 5;
if (a != 5);
deyim1
Derleme hatası alınmaz.
(http://www.csharpnedir.com) 94
95. Tehlikeli Durum - 2
int a = 4,b = 5;
if(a != 4)
if(b == 5)
Console.WriteLine("Doğru");
else
Console.WriteLine("Yanlış");
int a = 4,b = 5;
if(a != 4)
if(b == 5)
Console.WriteLine("Doğru");
else
Console.WriteLine("Yanlış");
(http://www.csharpnedir.com) 95
96. Koşul Operatörü (?:)
Kısa if – else blokları yerine kullanılabilir.
?: Operatörü
İfade 1 ? İfade 2 : ifade 3
Yanlış Karar
Test Koşulu (bool) Doğru Karar
(http://www.csharpnedir.com) 96
97. switch-case Koşul İfadesi
Kompleks if-else blokları yerine okunabilirliği artırmak için
tercih edilir. İf-else bloklarına göre daha az yeteneklidir.
switch(sabit ifadesi) switch(sabit ifadesi)
{ {
case sabit1 : case sabit1 : deyim1; break;
deyim1 case sabit1 : deyim2; break;
break; default : deyim3; break;
case sabit2 : }
deyim2
break;
default : Neden hatalı ?
deyim3
break;
}
(http://www.csharpnedir.com) 97
98. Önemli Kurallar
break deyimi zorunludur.
Bir case deyimi sağlandığı zaman ikinci bir case
deyimine goto anahtar sözcüğü ile açıkça belirtilmedikçe
geçilemez (C,C++ dillerinde böyle değil)
switch(sabit ifadesi) switch(sabit ifadesi)
{ {
case sabit1 : deyim1; case sabit1 : deyim1; goto case 2;
case sabit2 : deyim2; break; case sabit2 : deyim2; break;
default : deyim3; break; default : deyim3; break;
} }
Hata : Control cannot fall through from one case label ('case 1:') to another
(http://www.csharpnedir.com) 98
99. switch-case Koşul İfadesi
Ortak case ifadeleri
int a = 2;
switch(a)
{
case 1 :
case 2 :
Console.WriteLine("Case1 ve Case2");break;
case 3 :
Console.WriteLine("Case3");break;
}
* Default yok !
(http://www.csharpnedir.com) 99
100. Özet
case anahtar sözcüğünün yanındaki ifadeler sabit olmak zorundadır. Bu
ifadeler içinde değişken bulunamaz.
case ifadeleri C#’ ta herhangi bir tamsayı sabiti , karekter yada string sabiti
olabilir.
default durumunu istediğimiz yere yazabiliriz. Aynı şekilde case ifadelerinide
istediğimiz sırada yazabiliriz.
Bir switch bloğunda iki yada daha fazla sayıda aynı case ifadesi bulunamaz.
Bir switch bloğunda default case olmak zorunda değildir.
Akış herhangi bir case ifadesine geldiğinde, akışı farklı bir case ifadesine
yönlendirilmek istenirse goto anahtar sözcüğü kullanılır.
(http://www.csharpnedir.com) 100
101. Alıştırma
2 + 3, 2 * 5, 3 / 4 gibi işlemleri yapabilen bir konsol uygulaması
yapınız. Her iki operand ve operatör kullanıcı tarafından elle
girilecektir.
Kitap Kapalı
(http://www.csharpnedir.com) 101
102. Döngüler (Loops)
Profesyonel uygulama geliştirmeye ilk adım
Döngüler bir yada daha fazla deyimin belirli bir koşul
sağlanana kadar bir yada daha fazla sayıda çalıştırılmasını sağlar.
for döngüsü
while döngüsü
do-while döngüsü
foreach döngüsü
(http://www.csharpnedir.com) 102
103. for Döngüleri
for (ifade1; ifade2; ifade3) for (ifade1; ifade2; ifade3)
deyim1; {
deyim1;
deyim2;
...
}
ifade1 : Bir defa çalıştırılır. (Akış for döngüsüne geldiğinde)
ifade2 : Koşul ifadesidir. Bool türünden değer üretmelidir.
İfade3 : Genellikle sayaç görevinde kullanılır. Kullanılmayabilir.
(http://www.csharpnedir.com) 103
105. Farklı kullanımlar
char ch;
for (ch=Convert.ToChar(Console.ReadLine()); ch != 'q‘ ;
ch =Convert.ToChar(Console.ReadLine()))
Console.WriteLine(ch);
int k = 0; int k = 0;
for (; k< 10;)
for (; k< 10; ++k) {
Console.WriteLine(k);
Console.WriteLine(k); ++k;
}
(http://www.csharpnedir.com) 105
106. Sonsuz döngüler(!)
int k = 0;
for (;;)
{
Console.WriteLine(k);
++k;
}
(http://www.csharpnedir.com) 106
107. Örnek
1’den 10000 e kadar olan sayılar içerisinde
5’e tam bölünen aynı zamanda 7 ‘ye tam
bölünemeyen sayıların sayısını bulan,
toplamını bulan ve bu sayıları listeleyen
programı yazınız.
(http://www.csharpnedir.com) 107
108. Alıştırma
Aşağıdaki ekran görüntüsünü elde edecek programı
yazınız. Yıldız dörtgenindeki satır ve sütun sayısı
sabit olmamakla beraber kullanıcı tarafından
girilecektir.
Kitaplar kapalı !
(http://www.csharpnedir.com) 108
109. while Döngüleri
while(koşul) while(koşul)
deyim {
deyim1
deyim2
...
}
int n=0;
int toplam=0;
while(n <= 100)
{
toplam += n;
n += 2;
}
(http://www.csharpnedir.com) 109
110. while Döngüleri
while (--n>=0)
{
// Bu döngü size neyi ifade ediyor?
}
while döngü yapısını kullanarak 1’den 100’e kadar olan çift
sayıların toplamını bulan programı yazınız?
Kitaplar kapalı !
(http://www.csharpnedir.com) 110
111. do while Döngüleri
do do
deyim {
while(koşul); deyim1
deyim2
while(koşul); }
deyim while(koşul);
do while döngülerinde döngü bloğundaki deyimler en az bir
kez çalıştırılırlar.
(http://www.csharpnedir.com) 111
112. do while – Klasik Kullanım
do
{
Console.Write("Şifreyi giriniz :");
yazi = Console.ReadLine();
}while (yazi != "sifre"););
while döngüsünden tek farkı döngü koşulunun bulunduğu
yerdir.
(http://www.csharpnedir.com) 112
113. foreach Döngü Yapısı
Yeni bir döngü yapısıdır. Diziler ve koleksiyon tabanlı
nesneleri elemanları arasında dolaşmak için kullanılır.
Diziler konusunda daha detaylı inceleyeceğiz.
foreach (int x in Dizi)
{
Console.WriteLine(x);
}
Döngünün her iterasyonunda elde edilen eleman read
only özelliğine sahiptir. Bu nedenle elle içeriği
değiştirilemez.
(http://www.csharpnedir.com) 113
115. Diziler
Bellekte ardışıl bulunan aynı türden nesneler kümesine dizi denilmektedir.
Bir dizi içierisindeki bütün elemanlara aynı isimle ulaşır.
Dizilerin eleman sayısı sabittir, sonradan değiştirilemez. Derleme zamanında
boyutu bilinmeyebilir. C ve C++’ta bu böyle değildir.
(http://www.csharpnedir.com) 115
116. Diziler
Dizi sınırlarını aşmak C ve C++’ ın aksine yasaklanmıştır.
Bütün diziler FCL’de System.Array sınıfını karşılık düşerler.
Dizilerde temel veri türleri gibi birer tür olarak görülmelidri. Örneğin int türünden biri dizi, object türden bir dizi yada Ogrenci sınıfı türünden bir dizi.
(http://www.csharpnedir.com) 116
117. Dizi değişkenleri tanımlama
int[] dizi = new int[25]; int i = dizi[0];
int i = dizi[7];
int[] dizi;
dizi = new int[25];
Bildirim ve tanımlama arasındaki fark nedir?
Yukarıdaki dizi tanımlamalarında bütün dizi elemanları
varsayılan olarak 0 değerine atanır.Bunu örnek bir
program ile gösterelim.
Varsayılan değer her veri tipi için farklı olacağını
unutmamak gerekir.
(http://www.csharpnedir.com) 117
118. Diğer bir dizi tanımlama biçimi
string[] dizi1 = {"Bir","İki","Üç"};
int[] dizi2 = {1,2,3}; 3 elemanlı diziler
float[] dizi3 = {1f,2f,3f};
Yukarıdaki dizi tanımlamalarında bütün dizi elemanları
varsayılan olarak 0 değerine atanır.Bunu örnek bir
program ile gösterelim.
Varsayılan değer her veri tipi için farklı olacağını
unutmamak gerekir.
int[] dizi1=new int[10],dizi2 = new int[10];
int[] dizi1,dizi2;
(http://www.csharpnedir.com) 118
119. foreach döngüsü ve diziler
Foreach döngü yapısı diziler gibi birden fazla eleman içeren
yapılar için tasarlanmıştır.
int[] dizi = {1,2,3,4,5};
foreach(int eleman in dizi)
Console.WriteLine(eleman);
int[] dizi = {1,2,3,4,5};
foreach(int eleman in dizi)
eleman = 5;
Yukarıdaki blok doğrumu?
(http://www.csharpnedir.com) 119
120. Çok boyutlu diziler
Her bir elemanı yine bir dizi olan dizi çeşitlerine çok boyutlu dizi
denir.
Matris dizileri
Düzensiz(Jagged) diziler
(http://www.csharpnedir.com) 120
121. Matris Dizileri
3X2 boyutlu matris dizisi : 3 satır sayısı, 2 sütun sayısı
int[,] dizi = {{1,2},{3,4},{5,6}};
dizi[0,0] = 1
dizi[0,1] = 2
dizi[1,0] = 3
dizi[1,1] = 4
dizi[2,0] = 5
dizi[2,1] = 6
3X4 Matrisi
(http://www.csharpnedir.com) 121
122. Matris Dizileri
Matris dizileri iki boyutlu olmak zorunda değildir.
int[,,] dizi = {{{1,2},{3,4}},{{5,6},{7,8}},{{9,10},{11,12}}};
Bu dizi kaç boyutludur ve her boyut kaç eleman içerir?
Cevap : 3 boyutlu, Eleman sayısı (3,2,2)
dizi[0,0,0]=1 dizi[1,1,0]=7
dizi[0,0,1]=2 dizi[1,1,1]=8
2’den fazla boyutlu diziler gerçek
dizi[0,1,0]=3 dizi[2,0,0]=9
hayatta çok fazla kullanılmaz
dizi[0,1,1]=4 dizi[2,0,1]=10
dizi[1,0,0]=5 dizi[2,1,0]=11
dizi[1,0,1]=6 dizi[2,1,1]=12
(http://www.csharpnedir.com) 122
124. Düzensiz(jagged) Diziler
Her bir elemanı farklı sayıda elemanlı dizilerden oluşan dizilerdir
int[][] dizi = new int[3][]; //düzensiz dizi tanımlama
dizi[0] = new int[3];
dizi[1] = new int[4];
dizi[2] = new int[2];
dizi[0,0] = 1
dizi[0,1] = 2
dizi[1,0] = 3
dizi[1,1] = 4
dizi[2,0] = 5
dizi[2,1] = 6
(http://www.csharpnedir.com) 124
125. Düzensiz(jagged) Diziler
Düzensiz dizilerin elemanlarına ulaşım daha zordur. Çünkü
bu tür dizilerin kolon sayısı sabit değildir.
int[][] dizi = new int[3][];
dizi[0] = new int[]{1,2,3};
dizi[1] = new int[]{4,5,6,7};
dizi[2] = new int[]{8,9};
for(int i =0 ; i<dizi.GetLength(0) ; ++i)
for(int j = 0 ; j<dizi[i].GetLength(0) ; ++j)
Console.WriteLine(dizi[i][j])
(http://www.csharpnedir.com) 125
126. System.Array Sınıfı
Güzel özellikleri ve metotları vardır.
BinarySearch Length
Clear Rank
Clone IsReadOnly
Copy IsFixedSize
CopyTo
GetLength
GetValue
IndexOf
Reverse Özellikler
SetValue
Sort
CreateInstance
Metotlar
(http://www.csharpnedir.com) 126
127. CreateInstance() Metodu
1-) CreateInstance(Type, int, int, int); Bu metod ile parametre ile verilen
eleman sayılarda Type türünden 3 boyutlu diziler oluşturulur.
2-) CreateInstance(Type, int); Type türünden int ile verilen sayı kadar
elemanı olan bir dizi nesnesi oluşturulur.
3-) CreateInstance(Type, int[]); Çok boyutlu diziler oluşturmak için kullanılır.
Çok boyutlu dizilerin herbirinin kaç elemanlı olduğunu belirlemek için int
türden bir dizi metoda parametre olarak gönderilir.
4-) CreateInstance(Type, int, int); Parametre olarak verilen boyutlarda iki
boyutlu dizi nesnesi oluşturur.
Bu şekilde oluşturulan dizilerin elemanlarına nasıl ulaşırız?
(http://www.csharpnedir.com) 127
128. Temel dizi işlemleri
1-) Dizilerin başka dizilere kopyalanması. (Copy Metodu)
2-) Dizilerinin elemanlarını sıralama (Sort Metodu)
3-) Dizilerde arama (BinarySearch metodu)
4-) Dizi elemanlarını ters çevirme (Reverse metodu)
(http://www.csharpnedir.com) 128
129. Örnek
Herhangi bir türden dizinin elemanlarını Array sınıfının
Reverse() metodunu kullanmadan ters çeviren bir program
yazınız.
Kitaplar kapalı!
Örneğin dizi = {1,2,3,4,5,6} ise sonuç {6,5,4,3,2,1} olmalı
(http://www.csharpnedir.com) 129
130. Metod Nedir?
Programın her hangibir yerinde kullanılmak
için belirli bir işi yerine getirmek amacıyla
tasarlanmış alt programlara denir.
Kaynak kodların tekrar kullanılabilirliğini
sağlayan yapılardır.
(http://www.csharpnedir.com) 130
131. Bir Metodun Genel Yapısı
Metod Gövdesi
Parametreler •parametreler işlenir. Sonuç
•işlemler yapılır. (Geri dönüş
•bir sonuç üretilir. değeri)
Bir metod az ve öz iş yapmalıdır.
(http://www.csharpnedir.com) 131
132. Metod Bildirimi
Geri Dönüş Tipi Metodun Adı
static int MetodAdi ( int a, string c);
{
Metoda
return ( a + c ); gönderilen
parametreler.
}
Sonuçu geri döndürten
anahtar sözcük.
(http://www.csharpnedir.com) 132
134. Metodlar
Geri dönüş değeri olmayan metodlarda,
return anahtar sözcüğü kullanılabilir mi? ?
static void Yaz(object parametre)
{
Console.WriteLine(parametre.ToString());
return;
}
(http://www.csharpnedir.com) 134
135. Metodlar
Aşağıdaki kod neden çalışmaz?
?
static void Yaz(int a,int b)
{
return a+b;
}
(http://www.csharpnedir.com) 135
136. Metodlar
Aşağıdaki kod neden çalışmaz?
?
static void Main(string[] args)
{
float a=10;
Yaz(a);
}
static void Yaz(int a)
{
Console.WriteLine(a);
}
(http://www.csharpnedir.com) 136
137. Metodlar
Aşağıdaki kod neden çalışmaz?
static void Main(string[] args)
?
{
float a=10;
int b=(int)a;
Yaz(b);
}
static void Yaz(int a)
{
Console.WriteLine(a);
static int Topla(int a)
{
Console.WriteLine(a);
}
}
(http://www.csharpnedir.com) 137
138. Metodlar
Aşağıdaki kod neden çalışmaz?
static void Main(string[] args)
?
{
float a=10;
}
static void Yaz(int a,b)
{
Console.WriteLine(a);
}
(http://www.csharpnedir.com) 138
139. Metodlar
Aşağıdaki kod neden çalışmaz?
?
static void Yaz(int a,int b)
{
int a;
}
(http://www.csharpnedir.com) 139
140. Metodlar
Verilen iki sayının en büyüğünü bulan
bir metod. ?
(http://www.csharpnedir.com) 140
141. Metod Bildirimi
Metodlar isimlendirilirken değişken isimlendirmedeki kurallara uyulur.
Bir başka Main metodunu tanımlayamayız.
Metodlar çağırılırken parametereler eksiksiz girilmelidir.
Metodların geri dönüş değeri herhangibir türden olabilir.
Geri dönüş değeri olmayan metodlar void olarak tanımlanır.
Metodların geri dönüş değerlerini uyumlu türden bir nesneye atamak
gerekir.
Void olarak tanımlanmış metodlarda return anahtar kelimesi kullanılmaz.
Geri dönüş değerlerinde söz konusu olan gizli tür dönüşümleri ve tür
uyumsuzlukları parametreler içinde geçerlidir.
Parametre almayan metodlar tanımlanabilir.
Bir metod içinde başka bir metod bildirilemez.
Metod içinde tanımlı değişkenler metod dışında geçersizdir.
Metod parametrelerinin her birinin türü tek tek belirtilmelidir. Virgül
kullanımı geçersizdir.
Metod parametreleri metodun gövdesinde yeniden bildirilemez.
(http://www.csharpnedir.com) 141
142. Metod Parametresi Olarak Diziler
static void DiziYaz ( int[] dizi)
{
foreach(int i in dizi)
{
Console.WriteLine(i);
}
}
static void Main()
{
int[] dizi={1,2,3,4};
DiziYaz (dizi);
}
(http://www.csharpnedir.com) 142
143. Metodlar
Herhangibir tipteki bir dizinin tüm
elemanlarını ekrana yazdıracak bir metod.
static void Yazdir ( Array dizi ) {
?
foreach(object eleman in dizi)
Console.WriteLine(eleman.ToString());
}
[STAThread]
static void Main(string[] args){
int[] dizi1=new int[3];
dizi1[0]=1;
dizi1[1]=2;
dizi1[2]=3;
float[] dizi=new float[2];
dizi[0]=1.454f;
dizi[1]=1.2323f;
Yazdir(dizi1);
Yazdir(dizi);}
(http://www.csharpnedir.com) 143
144. Metodlar
Herhangibir tipteki bir dizinin tüm
elemanlarını ekrana yazdırırken ikinci bir
parametre ile dizi elemanlarını dikey veya
?
yatay yazdıracak bir metod.
(http://www.csharpnedir.com) 144
145. Değer ve Referans Parametreleri
Değer tipleri metodlara parametre olarak aktarılırken bit
bit kopyalanarak aktarılırlar. Metod içinde bu değerin
değiştirlmesi orjinal değeri etkilemez.
static void DegerTipi( int Deger )
{
Deger=50;
}
static void Main()
{
int a=10;
Console.WriteLine(a); 10
DegerTipi(a);
Console.WriteLine(a); 10
}
(http://www.csharpnedir.com) 145
146. Değer ve Referans Parametreleri
Referans tipleri metodlara parametre olarak aktarılırken bit bit
kopyalanmaz. Kopyalanan sadece referansın heap’ te işaret ettiği
adrestir. Metod içinde bu değerin değiştirlmesi orjinal değeride etkiler.
static void DegerTipi( string[] Deger )
{
Deger[0]=“50”;
}
static void Main()
{
string[] a={“10”,”5”,”4”};
Console.WriteLine(a[0]); 10
DegerTipi(a);
Console.WriteLine(a[0]); 50
}
(http://www.csharpnedir.com) 146
147. ref ve out Anahtar Sözcükleri
Değer tiplerini metodlara referans olarak aktarmaya
zorlamak için ref ve out anahtar sözcükleri kullanılır.
static void DenemeRef ( ref int x )
{
x = 50 ;
}
static void Main()
{
ref ile tanımlanmış parametrelere
int x=10;
ilk değer verilmek zorundadır.
DenemeRef( ref x);
Console.WriteLine(x); 50
}
(http://www.csharpnedir.com) 147
148. ref ve out Anahtar Sözcükleri
out anahtar sözcüğü parametre için ilk değer verme
zorunluluğunu ortadan kaldırır.
static void DenemeRef ( out int x )
{
x = 50 ;
}
static void Main()
{
DenemeRef( out x);
Console.WriteLine(x); 50
}
(http://www.csharpnedir.com) 148
149. Metodların Aşırı Yüklenmesi
Aynı(benzer) amaca hizmet eden, aynı isimde
birden fazla metodun oluşturulmasına,
metodların aşırı yüklenmesi denir.
Derleyici aynı isimli metodları ayırt etmek için,
metod imzalarına bakar.
(http://www.csharpnedir.com) 149
150. Metodların Aşırı Yüklenmesi
Metod İmzası;
static void Metod1 ( int x, int y ) Metod imzası, parametre
{ sayısı ve parametrelerin
... veri tiplerinden oluşur.
} Metodun geri dönüş
static void Metod1 ( float x, float y)
değerinin metod imzasında
{ bir rolü yoktur.
...
}
static void Metod1 (string x, string y)
{
...
}
(http://www.csharpnedir.com) 150
151. Overloading
Toplam metodu için overloading.
İki integer değeri toplayacak.
İki double değeri toplayacak.
?
Integer bir dizideki tüm elemanları
toplayacak.
İki string değeri metinsel olarak
birleştirecek.
(http://www.csharpnedir.com) 151
152. Değişken Sayıda Parametre Alan Metodlar
Bir metoda değişken sayıda parametre aktarmak için
params anahtar kelimesi kullanılır. Bu sayede istediğimiz
sayıda parametreyi metoda gönderebiliriz.
static int Toplam ( params int[ ] sayilar )
{
...
}
static void Yaz ( int bicim, params int[ ] sayilar )
{
...
}
(http://www.csharpnedir.com) 152
153. Değişken Sayıda Parametre Alan Metodlar
Değişken sayıda parametre içeren metodlar, aşırı yüklenmiş
metodlar olduklarında değerlendirmeye alınmazlar.
static int Yaz ( int bicim, params object[ ] o )
{
...
}
static void Yaz ( int bicim, object b )
{
...
}
iki parametre alıyor. Her iki Yaz metodunada
Yaz ( 0, 5 ); uyar. Ancak params metod imzasında dikkate
alınmadığından, ikinci Yaz metodu çağırılır.
Yaz ( 0 , 5 , 3 , 4 ); Ancak şimdi params içeren metod çağırılır.
(http://www.csharpnedir.com) 153
156. Main Metodu
Main metodu programın çalışmaya
başladığı noktadır.
Main metodununda aşırı yüklenmiş
versiyonları vardır.
(http://www.csharpnedir.com) 156
157. Main Metodu
Main metodu geri dönüş değerine sahip olabilir.
Main metodu parametre alarak, komut satırı
argümanlarının program içinde kullanılabilmesine
olanak sağlar.
static int Main ( string [ ] args )
{
for ( int i=0; i < args.Length ; ++i )
{
...
}
}
(http://www.csharpnedir.com) 157
158. Main Metodu
Main metodu komut satırından 3 parametre
alacak.
1ncisi 4 işlemi temsil eden bir değer.
?
(char)
2nci ve 3üncü parametreler ise 4 işlem
için gerekli operandlar.
(http://www.csharpnedir.com) 158
159. Uygulama
Kendisine değişken sayıda parametre olarak
gelen bütün sayıların karekökünü bir diziye
aktarıp, bu dizinin referansı ile geri dönecek
?
bir metod.
(http://www.csharpnedir.com) 159
160. Uygulama - Fibonacci
?
Fibonacci Dizisini belirli bir değer için hesaplayan
program.
0 1 1 2 3 5 8 13 24...
Fibonacci(n)=Fibonacci(n-1)+Fibonacci(n-2)
(http://www.csharpnedir.com) 160
162. Sınıflar
Nesne Yönelimli Programlama tekniğinin
temel yapı taşıdır.
Sınıflar birer veri yapısıdır. Programcıya
bir veri modeli sunar. Bu veri modeli
yardımıyla nesneler oluşturulur.
(http://www.csharpnedir.com) 162
163. Sınıflar
sınıf tanımlamaları
class anahtar sözcüğü ile başlar.
class KrediHesabi sınıfın adı
{
public ulong HesapNo; Sınıfın üye elemanları
public double Limit; özellikler(değişkenler)
public string KartSahibi; ve metodlardır.
}
Erişim belirleyicileri ; public, private, protected, internal
veya protected internal. Varsayılan erişim belirleyici değeri
private ‘ tır.
(http://www.csharpnedir.com) 163
164. Sınıf Nesneleri Tanımlama
class KrediHesabi
{ Bir sınıf nesnesi oluşturmak
Sınıf public ulong HesapNo; için new anahtar sözcüğü
Tanımı public double Limit; kullanılır.
public string KartSahibi;
}
class AnaSinif
{
static void Main()
{
KrediHesabi hesap = new KrediHesabi ( ) ;
hesap.HesapNo=565656556; Sınıf üye elemanlarına
hesap.Limit=100000000;
hesap.KartSahibi=“Sefer Algan”; ulaşmak için . operatörü
} kullanılır.
}
Sınıf tanımlamaları için bellekte yer ayrılmaz. Sınıf tanımı,
oluşturulan nesnelerin, derleyiciyi için neye benzeyeceğini gösterir.
(http://www.csharpnedir.com) 164
165. Sınıf Üyelerinde Erişim Belirleyicilerin Rolü
class KrediHesabi
{
Sınıf private ulong HesapNo; Bu üyelere, private oldukları için
Tanımı double Limit; sadece KrediHesabi
sınıfından erişilebilir.
public string KartSahibi; public üyelere diğer sınıflardanda
} erişilebilir.
class AnaSinif
{
static void Main()
{
KrediHesabi hesap = new KrediHesabi ( ) ;
hesap.HesapNo=565656556; KrediHesabi.Limit is
hesap.Limit=100000000; inaccessible
hesap.KartSahibi=“Sefer Algan”; due to its
} protection level.
}
(http://www.csharpnedir.com) 165
166. Sınıf Nesneleri Arası Atama
class AnaSinif
{
static void Main()
{
KrediHesabi hesap1 = new KrediHesabi ( ) ; Hesap2 nesnesi
KrediHesabi hesap2; tanımlandı ancak
bellekte henüz yer
tahsis edilmedi.
hesap1.HesapNo=4545454;
Hesap2 nesnesi
hesap2=hesap1;
artık Hesap1 nesnesinin
hesap2.HesapNo=1111111; heap’te gösterdiği adresi
} referans eder.
}
(http://www.csharpnedir.com) 166
167. Sınıf Nesneleri Arası Atama
KrediHesabi hesap1 = new KrediHesabi();
KrediHesabi hesap2;
Stack Heap
hesap1
@
hesap2 HesapNo
@ Limit
Kart Sahibi
(http://www.csharpnedir.com) 167
168. Sınıf Nesneleri Arası Atama
hesap2 = hesap1 ;
Stack Heap
hesap1
@
hesap2 HesapNo
@ Limit
Kart Sahibi
(http://www.csharpnedir.com) 168
169. Sınıflara Metod Eklemek
class Dortgen
{
public int En;
public int Boy;
public void EnBoyBelirle ( int e, int b )
{
class metod tanımı
En=e;
tanımı Boy=b;
}
public int Alan ( )
{
metod tanımı
return En*Boy;
}
}
Erişim Belirleyicileri Geri Dönüş Tipi Metod Adı Parametreler
(http://www.csharpnedir.com) 169
170. Dörtgen Sınıfı
?
Dörtgen Sınıfı
Kare ve dikdörtgenlerin alanının hesaplayacak
Alan metodu.
Dörtgenin En ve Boy alanları.
Dörtgenin En ve Boy alanlarınını değerlerini
belirleyecek metod.
Dörtgene ait verileri (en, boy, alan) yazdıracak
metod.
(http://www.csharpnedir.com) 170
171. Metodlar
EnBoyBelirle metoduna neden ihtiyacımız var?
?
Cevap : Dortgen sınıfı içindeki, en ve boy alanlarına
girilen değerlerin belirli bir aralıkta olup olmadığını
kontrol edebilmek için.
(http://www.csharpnedir.com) 171
172. Özellik Tanımlama
Özellikler, sınıf içi alanların, dış ortamdan saklanması
bir başka deyişle kapsüllenerek erişimlerinin kontrol
altına alınmasını sağlar.
(http://www.csharpnedir.com) 172
173. Özellik Tanımlama
class Dortgen
{
private int mEn; Bu sınıf dışından bu alanlara
private int mBoy; doğrudan erişilemez.
public int En
{ alanın değerini döndürür.
get
{
return mEn;
}
Özellik set alana değer verir.
tanımı. {
if ( value < 0 )
mEn=0;
else
mEn= value ;
}
}
... alana atanacak değeri temsil eder.
(http://www.csharpnedir.com) 173
174. Özellikleri Kullanmak
En özelliğinin set bloğu
Dortgen d1=new Dortgen ();
çalışır. value değeri 25
olur.
özelliklerin değerleri
d1. En = 25 ;
atanıyor.
d1. Boy = 40; Boy özelliğinin set bloğu
çalışır. value değeri 40
olur.
Console.WriteLine ( d1 . En ) ;
Console.WriteLine ( d1 . Boy ) ;
Boy ve en özelliklerinin
değerilerine erişiliyor.
get blokları çalışır.
return ile değer
geri döner.
(http://www.csharpnedir.com) 174
175. Dortgen Sınıfının Tekrarı
Sınıfın Üyeleri
Özellikler
private En
private Boy
Metodlar
public int Alan
public void EnBoyBelirle
public void Yaz
public bool Karemi
public double KosegenBul
(http://www.csharpnedir.com) 175
176. Yapıcı Metodlar ( Constructors )
Bir nesne dinamik olarak oluşturulduğunda
otomatik olarak çalıştırılan metodlardır.
Nesnenin üye elemanlarına ilk değerlerini
vermek yada sınıf nesnesi için gerekli kaynak
düzenlemeleri yapmak için kullanılırlar.
Her sınıfın biz tanımlasakta tanımlamasakta otomatik
olarak oluşturulan varsayılan bir yapıcı metodu
( default constructor ) vardır.
(http://www.csharpnedir.com) 176
177. Yapıcı Metodlar ( Constructors )
Yapıcı metodların geri
dönüş değeri yoktur.
Geri dönüş değerinin
olmaması metodun
class Zaman Yapıcı metodların ismi
void olduğu anlamına sınıf ismi ile aynı olmalıdır.
{
gelmez.
...
public Zaman ( int h, int m, int s )
{
Saat = h;
Yapıcı Metod Dakika = m;
Saniye = s; Yapıcı metodlar
} parametreler alabilir.
...
}
Geri dönüş değeri kavramı olmadığı için
return anahtar kelimesi kullanılmamıştır.
(http://www.csharpnedir.com) 177
178. Yapıcı Metodun Çağırılması
public Zaman ( int h , int m , int s ) yapıcısını çağırır.
Zaman z = new Zaman ( 5 , 59 , 60 ) ;
int h int s
int m
(http://www.csharpnedir.com) 178
179. Varsayılan Yapıcı Metodlar
Her sınıf nesnesinin en az bir
varsayılan yapıcı metodu vardır.
Varsayılan yapıcı metodlar herhangibir parametre
almazlar.
Nesnelerin üye elemanlarına varsayılan değerlerini
atarlar.
Varsayılan yapıcı metodu kendimizde yazabiliriz. Bu
durumda derleyicinin önerdiği varsayılan yapıcı yerine
bizim yazdığımız varsayılan yapıcı çağırılır.
(http://www.csharpnedir.com) 179
180. Varsayılan Yapıcı Metodlar
class Zaman
{
...
public Zaman ( ) Varsayılan yapıcılar
{ parametre almazlar.
Varsayılan Saat = 4 ;
yapıcı Dakika = 10 ;
Saniye = 15 ;
}
...
}
...
Zaman sınıfının
Zaman z = new Zaman ( ) varsayılan yapıcı metodunu
çalıştırır.
(http://www.csharpnedir.com) 180
182. Yapıcı Metodların Aşırı Yüklenmesi
class Zaman Aşırı yüklenmiş yapıcıların ayırt edilmesinde, her
{ zaman olduğu gibi metod imzaları rol oynar.
...
public Zaman (int h , int m , int s )
{
Saat = h ; Zaman z = new Zaman (1,15,59);
Dakika = m ;
Saniye = s;
}
public Zaman ( int h , int m )
{
Saat = h ; Zaman z = new Zaman (1,15);
Dakika = m ;
Saniye = 0;
}
...
}
(http://www.csharpnedir.com) 182
183. Yapıcı Metodlarda This Anahtar Sözcüğü
class Zaman
{
...
public Zaman (int h , int m , int s )
{
Saat = h ;
Dakika = m ;
Saniye = s;
}
public Zaman ( int h , int m ) : this ( h , m , 0 )
{
}
public Zaman ( int h ) : this (h , 0 , 0 )
{
}
...
}
(http://www.csharpnedir.com) 183
184. Yapıcı Metodlar
?
Bir nesneyi, başka bir nesneden nasıl
örneklendirebiliriz ?
(http://www.csharpnedir.com) 184
185. Kopyalayıcı Yapıcı Metodlar
Bir sınıf nesnesini yine bir sınıf nesnesi ile oluşturmak için kullanılır.
class Zaman
{
... Bu metodlar tek bir
public Zaman ( Zaman Yeni ) parametre alır. Bu parametre
{ sınıf türünden nesnelerdir.
Saat = Yeni . Saat ;
Dakika = Yeni . Dakika ;
Saniye = Yeni . Saniye ;
}
...
}
(http://www.csharpnedir.com) 185
186. Soru
Bu kodun ekran çıktısı ne olur? Neden ?
Zaman z1=new Zaman(4,53,12);
Zaman z2=new Zaman(2,45,68);
z2=z1;
z2.S=5;
z1.Yaz();
(http://www.csharpnedir.com) 186
187. Yıkıcı Metodlar ( Destructors )
Yıkıcı Metodlar, Garbage Collector bir nesne için bellekte ayrılan
alanı kaynağa iade etmesinden hemen önce çalışır.
Bir sınıfın sadece bir yıkıcı metodu olabilir.
class Zaman Yıkıcı metodların isimleride,
{ yapıcalarda olduğu gibi sınıf ismi
... ile aynıdır.
~ Zaman ( )
{ Yıkıcı metodlar parametre almazlar.
}
... Yıkıcı metod adları ~ karakteri ile başlar.
}
(http://www.csharpnedir.com) 187
189. Statik Metodlar
Statik metodlar, bir işlevi gerçekleştirmek için, bir nesne
tanımlanmasına gerek olmadığı durumlarda kullanılır.
class Cebir
{
public static int Topla ( params int[] dizi )
{
int toplam=0;
static metodlar for ( int i = 0; i<dizi.Length; i++)
static anahtar sözcüğü {
ile tanımlanır. toplam += dizi[i];
}
return toplam;
}
}
(http://www.csharpnedir.com) 189
190. Statik Metodlar
int t;
t = Cebir . Topla ( 4 , 5 , 6 ) ;
Static metodlara erişmek için, nesne tanımlamaya gerek yoktur.
Static metoda, sınıf adı ve nokta notasyonu yardımıyla erişilir.
Static bir metod içinden normal bir sınıf metodu
çağırılamaz. Ancak bir static metod içinden başka bir
static metod çağırılabilir.
Nesneler ile doğrudan iş yapmayan metodları static
olarak tanımlarız.
(http://www.csharpnedir.com) 190
191. Static Yapıcı Metodlar
Static yapıcılar, bir sınıfın static değişkenleri ile ilgili
işlemlerde kullanılır.
class Oyuncu
{
public Oyuncu( ) static yapıcı metodlar parametre
{
almazlar.
} public gibi bir erişim belirleyicisine
sahip olamazlar.
static Oyuncu ( )
static
{
Bir nesneyi hangi yapıcı metod ile
yapıcı oluşturursak oluşturalım, static
metod
} yapıcı metod ilk nesne
} yaratıldığında bir kez çalıştırılır.
(http://www.csharpnedir.com) 191
192. Üçü bir arada.
public class Statik{
public static int a;
public static string b;
? Bu kodun ekran
çıktısı ne olur?
public static bool c;
public Statik(){}
static Statik(){}
}
class Class1{
[STAThread]
static void Main(string[] args){
Console.WriteLine(Statik.a);
Console.WriteLine(Statik.b);
Console.WriteLine(Statik.c);
}
}
(http://www.csharpnedir.com) 192
193. Üçü bir arada.
int a; ? Bu kodun ekran
çıktısı ne olur?
public static void Metod()
{
a=Convert.ToInt32(Console.ReadLine());
int b=a/2;
Console.WriteLine(b.ToString());
}
[STAThread]
static void Main(string[] args)
{
Metod();
}
(http://www.csharpnedir.com) 193
194. Üçü bir arada.
class Oyuncu
{
public static int Toplam;
public Oyuncu()
{
Oyuncu.Toplam++; Varsayılan yapıcı
}
static Oyuncu()
{
Toplam=0; static yapıcı
}
~Oyuncu()
{
Toplam--; yıkıcı
}
}
(http://www.csharpnedir.com) 194
195. Üçü bir arada.
class AnaSinif
{
?
Bu kod nasıl çalışır?
static void Main()
{
Oyuncu o = new Oyuncu ( ) ;
Console.WriteLine ( Oyuncu . Toplam ) ;
Oyuncu x = new Oyuncu ( ) ;
}
}
(http://www.csharpnedir.com) 195
196. Const Elemanlar
Programın çalışması sırasında değerinin değişmeyeceği
düşünülen değişkenler, sabit olarak tanımlanır.
public const double PI = 3.14 ; sabitlere mutlaka
ilk değer verilmelidir.
sabitler const anahtar kelimesi ile tanımlanır.
Console.WriteLine ( Cebir . PI ) ;
sabitlere nesneler üzerinden değil
sınıf nokta notasyonu ile erişilebilir.
Sabit ifadeleri çalışma zamanında değiştirilemez.
(http://www.csharpnedir.com) 196
197. Const Elemanlar
Sabitler referans tiplerine uygulanamaz.
İstisnai bir durum olabilir mi?
?
Sabitler referans tiplerinden sadece string türlerine new
anahtar sözcüğü kullanılmadığı takdirde uygulanabilir. Bir
sınıfa veya başka bir referans tipine uygulanamaz
public const string a = “ Burak “ ;
(http://www.csharpnedir.com) 197
198. ReadOnly Elemanlar
ReadOnly elemanlar, referans tiplerini sabit olarak tanımlamak
istediğimiz durumlarda kullanılır.
Readonly elemanların değerleri çalışma zamanında yada derleme
aşamasında değiştirilemez.
static readonly Deneme a = new Deneme ( ) ;
Sabitler ile readonly elemanlar arasındaki tek fark, sabitler
için ilk değer verilmesinin derleme zamanında, readonly
elemanlar içinse çalışma zamanıda yapılmasıdır.
(http://www.csharpnedir.com) 198