Görsel Programlama 1 Dersi
2. Hafta
C# Dilinin Yapısı
C# programlama dili Microsoft firması tarafından geliştirilmiş %100 nesne yönelimlidir. Programlamanın gerçek yaşama uyarlanması olarak düşünülebilir. Yaşamdaki nesnelerden esinlenerek ortaya çıkarılan bu yapıda nesnelere ait özellikler ve davranışlar programlama mantığında da kullanılmıştır.
C# Dilinin Yapısı
C# programlama dilinde kod yapısı aşağıdaki gibidir.
using System;
namespace ornekProgram {
class Program {
static void Main(string[] args) {
} } }
C# Dilinin Yapısı
C# dilinde kodlar bloklar halinde yazılır. Bloklar { } parantezleri arasında kalan kısımdır.
Kod yapısında yer alan ifadeleri inceleyelim.
Programlarımızda .Net Framework içerisinde tanımlı sınıf kütüphaneleri yada daha önce başka bir proje için geliştirdiğimiz kütüphaneleri kullanmak istediğimizde bunları projeye eklemek gerekir. Bu işlem "using" anahtar sözcüğüyle olur.
Using System;
Sınıf Kütüphanesinin Adı
C# Dilinin Yapısı
namespace isim alanı ya da isim uzayı olarak adlandırılabilir. Visual Studio ile proje oluşturulduğunda proje ismiyle varsayılan olarak eklenir.
Yazılan bir program çalıştırıldığında ilk çalıştırılan metot Main() metodudur.
static void Main(string[] args) {
Kod
Bokları }
C# Dilinin Yapısı
Ana metot dışında metot tanımlamaları yapılabilir. Bu metotlar class’ları meydana getirir. Class’lar ise namespace’leri oluşturur.
C# programlama dilinde büyük harf küçük harf duyarlılığı vardır. Ayrıca satır sonları noktalı virgül ile belirtilir.
Değişkenler
Program yazarken klavyeden, dosyadan, ağ ortamından veri girişi yapılabilir ya da bir hesaplama sonucunun program içerisinde kullanılması gerekebilir.
Bu durumlar ile çok sık karşılaşılır.
Örneğin iki sayının toplanması işleminde klavyeden girilecek sayıların tutulacağı nesnelere ihtiyaç duyulur. Hatta toplama işleminin sonucunun tutulacağı nesne de gerekebilir. Program içerisinde kullanılan verilerin bir yerlerde saklanması gerekir. Verilerin saklanacağı yer bilgisayardaki bellek bölgeleridir. Veri türüne göre farklı boyutlarda bellekte yer açılarak veri saklanması için yer ayrılır. Bu bellek bölgelerinin program içerisinde kullanılması ise değişken ile olur.
Bellek bölgesinde saklanacak veri sayı (tamsayı, ondalıklı vb.), metin gibi farklı türlerde olabilir. Bu farklılıktan dolayı C# da farklı veri türleri vardır.
Değişkenleri İsimlendirme
C# programlama dilinde değişkenlere isim verilirken uyulması gereken kurallar vardır.
Türkçe karakterler kullanılabilir.
Değişkenler rakam ile başlamaz. Fakat değişken isimleri içerisinde rakam kullanılabilir.
"_" karakteri dışında hiçbir özel karakter ya da sembol kullanılamaz.
Boşluk karakteri kullanılamaz.
Programlama diline ait komutlar, ifadeler değişken ismi olarak verilemez.
Büyük-Küçük harf duyarlılığı vardır.
Aynı isimli değişkenler aynı blok içerisinde kullanılamaz.
Değişkenleri İsimlendirme
Değişken İsmi
Durum Açıklama
A Doğru Büyük harf kullanılabilir.
5B Yanlış Rakamla başladığı için kullanılamaz.
Ad Doğru Büyük ve küçük harfler kullanılabilir.
TC Kimlik Yanlış Boşluk karakteri kullanılamaz.
ad&soyad Yanlış "_" dışında özel karakterler kullanılamaz.
Tel65 Doğru Rakamlar sadece değişkenin ilk karakteri olamaz. Bu durum dışında rakamlar kullanılabilir.
CepTel Doğru Büyük ve küçük harfler bir arada değişken ismi olarak kullanılabilir.
sayı Doğru Türkçe karakterler kullanılabilir.
_numara Doğru "_" karakteri ile başlayabilirler.
Veri Türleri
Tablo 1. Sayısal Veri Tipleri
Değişken Tipi
Bellekte Kapladığı Alan
Alabileceği Değer Aralığı
byte 1 Byte 0 ile 255 arasındaki tam sayı değerleri sbyte 1 Byte -128 ile 127 arasındaki tam sayı değerleri
short 2 Byte -32.768 ile 32.767 aralığındaki tamsayı değerleri ushort 2 Byte 0 ile 65.535 aralığındaki tamsayı değerleri
int 4 Byte -2.147.483.648 ile 2.147.483.647 aralığındaki tamsayı değerleri uint 4 Byte 0 ile 4.294.967.295 aralığındaki tamsayı değerleri
long 8 Byte -9.223.372.036.854.775.808 ile - 9.223.372.036.854.775.807 aralığındaki tamsayı değerleri
ulong 8 Byte 0 ile 18.446.744.073.709.551.615 aralığındaki tamsayı değerleri float 4 Byte + ya da - 1,5*10-45 ile + ya da - 3,4*1038 aralığındaki reel sayılar double 8 Byte + ya da - 5*10-324 ile + ya da - 1,7*10308 aralığındaki reel sayılar decimal 16 Byte + ya da - 1,5*10-28 ile + ya da - 7,9*1028 aralığındaki reel sayılar
Veri Türleri
Değişken Tipi Bellekte Kapladığı Alan
Alabileceği Değer Aralığı
Char 2 Byte Tek karakterli bir ifade tutar.
String Sınırsız Metinsel bir ifade tutar. Unicode
karakterlerden oluşur.
Tablo 2. Alfa sayısal (Metinsel) Veri Tipleri
Sayısal ve alfa sayısal veri tipleri dışında mantıksal, tarih ve object veri tipleri de vardır.
Tablo 3. Diğer Veri Tipleri
Değişken Tipi Bellekte Kapladığı Alan
Alabileceği Değer Aralığı
Bool 2 Byte Mantıksal veri tipi olup, True ya da
False değerlerini alabilir.
Object Sınırsız Tüm verileri kapsar. Zaten tüm veri
tipleri bu nesneden türemiştir.
DateTime 8 Byte Tarih ve zaman bilgisini tutar.
Veri Türleri
Değişkenler bellek bölgelerinin program içerisinde temsil edilmesini sağlayan nesnelerdir. Bu nesneler hangi türde veri saklanacaksa o veri tipiyle derleyiciye bildirimlerinin yapılması gerekir. Böylece veri tipine uygun olarak bellek bölgesinde yer ayrılır.
Veri Türleri
Veri Tipleri
Değişkenleri Tanımlama
Değişkenler kullanılmadan önce tanımlanmalıdır.
Tanımlanmadan kasıt değişken türüne göre bellek bölgesinde yer ayrılmasıdır. Değer ataması yapıldığında da bellek bölgesindeki ilgili alana değer yazılmış olur. C#
programlama dilinde değişken tanımlama aşağıdaki gibi yapılır.
{Değişken Tipi} {Değişken Adı} = {Değişkenin Değeri}
Üstte gösterilen kullanım şekli dışında değişkenler değerleri olmadan da tanımlanabilirler.
{Değişken Tipi} {Değişken Adı}
Değişkenleri Tanımlama
Örnek Açıklama
byte a=5; A değişkenine başlangıç değeri olarak 5 atanmıştır. Değişken "byte"
veri tipindedir.
byte a; byte tipinde a isimli bir değişken tanımlanmıştır. Başlangıç değeri verilmemiştir. Varsayılan değer "0" dır.
Tablo 4. Tamsayı Değişkenlerini Tanımlama
byte, sbyte, short, ushort, int, uint, long, ulong veri tipleri tamsayı değerlerini tutar ve tanımlanmaları Tablo 4’deki gibidir.
Değişkenleri Tanımlama
Örnek Açıklama
float a=5.3f; a değişkenine başlangıç değeri olarak 5,3 atanmıştır. Değişken
"float" veri tipindedir. Atanan değerin sağ tarafına "f" ya da "F"
harfinin yazılması gereklidir.
float a; float tipinde a isimli bir değişken tanımlanmıştır. Başlangıç değeri verilmemiştir. Varsayılan değer "0.0f" dır.
double a=5.3d; a değişkenine başlangıç değeri olarak 5,3 atanmıştır. Değişken
"double" veri tipindedir. Atanan değerin sağ tarafına "d" ya da "D"
harfinin yazılması gereklidir.
double a; double tipinde a isimli bir değişken tanımlanmıştır. Başlangıç değeri verilmemiştir. Varsayılan değer "0.0d" dır.
decimal a=5.3m; a değişkenine başlangıç değeri olarak 5,3 atanmıştır. Değişken
"decimal" veri tipindedir. Atanan değerin sağ tarafına "m" ya da "M"
harfinin yazılması gereklidir.
decimal a; decimal tipinde a isimli bir değişken tanımlanmıştır. Başlangıç değeri verilmemiştir. Varsayılan değer "0.0m" dır.
Tablo 5. Ondalıklı Sayı Değişkenlerini Tanımlama
Değişkenleri Tanımlama
Ondalıklı sayı değişkenlerine değer ataması yapılırken değerin sağ tarafına float veri tipi için "f" ya da "F", double veri tipi için "d" ya da "D" ve decimal veri tipi için de "m"
ya da "M" harfleri yazılmalıdır. Ondalıklı sayılarda eğer değerin yanında herhangi bir harf belirtilmemişse varsayılan olarak double kabul edilir.
Char Veri Türü
Char veri tipi ile tanımlanmış bir değişken tüm Unicode karakterleri tutabilir. Bellek bölgesinde 2 byte (6 bitlik) bir alan kaplar. Unicode sistemi İngiliz alfabesi dışında Türkçe, Japonca, Çince gibi tüm dillerin karakterlerini kapsar. Char isim olarak "Character" kelimesinin kısaltılmışıdır ve Unicode sistemindeki karakterlerden birini tutabilir. Bu karakterler sadece harf değildir, semboller ve rakamlar da birer karakterdir.
Char tipindeki bir değişkene değer ataması yapabilmek için tek tırnakların (‘ ’) kullanılması gereklidir.
Char Veri Türü
Örnek kullanım;
Değişkenler ilk değer atamalı ya da ilk değer atamasız tanımlanabilirler. İlk değer atamasız tanımlama aşağıdaki gibidir.
char karakter;
İlk değer atamalı tanımlama ise aşağıdaki gibidir.
char karakter=‘A’;
Char Veri Türü
C# dilinde bazı karakterlerin ekrana basılabilmesi için "\"
kullanılmalıdır. Bu karakterler Tablo 6’da gösterilmiştir.
Tablo 6. Kaçış (Escape) Karakterleri
Karakter Açıklama
\n Yeni satıra geçmek için kullanılır.
\t Tab tuşu işlevini gerçekleştirir.
\0 Null
\’’ Çift tırnak (") karakterinin ekrana basılması
\r Satır başına geçmek için kullanılır.
\b Geri al
\\ ‘\’ karakterini ekrana basabilmek için kullanılır.
\a Uyarı (bip) sesi
String Veri Türü
"string" veri türüne sahip bir değişkene metinsel bir ifade değer olarak verilebilir. Bir paragraf ya da cümle yazmak istediğimizde kullanılabilecek bir değişken türüdür.
"string" değişkenlere değer ataması çift tırnak (" ") kullanılarak yapılır.
Örnek kullanım;
string metin;
Ya da ilk değer atamalı olarak tanımlanmak istenirse;
string metin="BURSA";
Bool Veri Türü
Bool mantıksal veri tipidir. Alabileceği değerler True (doğru) ya da False (yanlış) dur. Karar yapılarında ve döngü sistemlerinde oldukça kullanışlıdır.
Örnek kullanım; diğer değişken türleri gibi ilk atamalı ya da ilk atamasız kullanılabilir.
bool a=True;
Bool a=(20<30);
Sonuç 20 sayısı 30’dan küçük olduğu için sonuç doğrudur. a değişkeninin değeri "True" olur.
Object Veri Türü
C# programlama dilinin nesne yönelimli bir dil olduğundan bahsedilmiştir. C# dilindeki tüm veri tipleri ‘’Object’’
sınıfından türetilmiştir. Dolayısıyla tüm veri tiplerine ait veriler Object türünden bir değişkene atanabilir.
DateTime Veri Türü
Tarih ve zaman bilgisi DateTime veri tipindeki değişkenlerde kullanılabilir. Örnek kullanımda gösterilen ifade de derlenme anındaki tarih ve saat bilgisi değişkene aktarılmaktadır.
Örnek kullanım;
DateTime tarihsaat=DateTime.Now();
Önemli!
Aynı veri tipinde birden fazla değişken tanımlanması
gerektiğinde değişken isimleri arasında virgül kullanılarak tanımlama yapılabilir.
Örnek; int a,b;
MaxValue
İlgili veri tipinin en fazla hangi sayısal değeri alabileceğini veren sabittir.
MaxValue
MinValue
Sayısal bir değişkenin içerisinde saklayabileceği en küçük sayıyı ilgili sayısal değişkenin türüne göre döndüren sabittir.
MinValue
Değişkenlerin Yaşam Alanı
Bir programda birçok değişken kullanılabilir. Bu
değişkenlerin geçerlilik alanları kullanıldıkları blok ile
sınırlıdır. C# dilinde bloklar { } parantezleri ile belirlenirler.
class Bloklar {
static void Main(string[] args) {
} }
Değişkenlerin Yaşam Alanı
Tabloda da görüleceği gibi "Bloklar" adında "class" bloğu { } aralığıdır ve "Main" bloğunu kapsar. Bu neden önemlidir.
Değişkenler tanımlandıkları bloklarda geçerlidir. Eğer bir bloğun kapsadığı alt bloklar var ise değişken o blokta da geçerliliğini devam ettirir.
Sabitler
Program yazarken bazı durumlarda sabit ifadeler kullanılır.
Program boyunca değerleri sabit olan değişmeyen anlamındadır.
Değişkenlere isim verirken uyulan tüm kurallara "sabit"
tanımlamaları içinde uyulur. "Sabit" ifadelerin "Değişken"
ifadelerden farkı program boyunca değiştirilemeyecek olmasıdır.
Ayrıca sabit ifadeler tanımlandıkları anda ilk değerlerini almak zorundadırlar. Sabit tanımlamaları const anahtar sözcüğü ile yapılır.
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
Bellek Bölgeleri
Bilgisayardaki bellek bölgelerini bilmek geliştirici açısından önemlidir. Değişkenlere atanan değerler bellek bölgelerinde saklanırlar. Bellek bölgeleri bilinirse geliştirilen uygulamalarda sistem kaynakları daha tasarruflu kullanılarak performans kayıpları azaltılabilir.
Stack Bölgesi; RAM bellek üzerinde değer tipli değişkenlerin değerlerinin tutulduğu bölgelerdir. Derleyici tarafından bu bölgede tutulacak değişkenlerin veri türlerinin bilinmesi gerekir.
Tanımlama işleminden sonra veri türüne göre bellekte yer ayrılır.
Heap Bölgesi; Bu bölgede RAM bellek üzerindedir. "Heap" te tutulacak nesnelerin derleyici tarafından önceden bilinmesi gerekli değildir. Referans tipli değişkenlerin tutulduğu bellek bölgesidir.
Sabit Bölge; Programda oluşturulan sabit ifadeler bu bölgede tutulurlar.
Static Bölge; Bu bölgede tutulan değişkenlerin ömürleri programın çalışma süresincedir. C# da static anhtar sözcüğü ile değişkenler bu bölgede saklanabilirler.
Register Bölgesi; Mikroişlemci içerisinde bulunur. Bu bölgeye erişim derleyiciler ile olur. Derleyici sık kullandığı verileri bu bölgede tutar.
Verilerin Kalıcı Saklanması; Ram de tutulan veriler geçicidir. Program sonlandırıldığında ya da çalışma esnasında kalıcı olarak saklanması istenen veriler CD, DVD, Blu Ray, harddisk, flash bellek gibi kayıt ortamlarına kaydedilebilirler.
Değer Tipli ve Referans Tipli Veri Türleri
Veri türleri bellek bölgelerinde saklanma durumlarına göre 2’ye ayrılır.
Değer tipli
Referans tipli
Değer tipli veri türleri belleğin "stack" denilen bölgesinde tutulur. Saklanması istenen değer doğrudan belleğe yazılır gerektiğinde çağrılır ve kullanılır. Şekil 4.2. de değer tipli bir değişkenin stack bölgesinde nasıl tutulduğu gösterilmiştir.
int a=10;
int b=5;
Stack Bölgesi 10
5 . . . a
b
Şekil 1. Stack bölgesinde değerin saklanması
a ve b adında tam sayı tipinde 2 değişken tanımlandığında bellek bölgesinde 4 byte lık yer ayrılır ve bu bölgeye değişkenin değeri direk olarak yazılır. Program içerisinde
değişkenler üzerinde işlem yapıldığında stack bölgesinden değişkenin değerine doğrudan erişilebilir.
Eğer kodlamada değer tipli değişkenleri bir birine eşitlersek durum Şekil 2’deki gibi olur. Stack bölgesinde fiziksel olarak ayrı ayrı saklandıklarından değişkenler birbirlerinden etkilenmezler.
int a=10;
int b=5;
a=b;
b=7;
Stack Bölgesi 5
7 . . . a
b
Şekil 2. Stack bölgesinde ki değişim
Referans tipli; Veriler "Heap" bölgesinde tutulur. Verinin tutulduğu "Heap" bölgesinin adresi ise "stack" tadır. Stack taki adres referans olarak kullanılarak Heap teki veriye erişilir.
C# dilinde tanımlı olarak gelen veri türleri içerisinde "string" ve
"object" veri türleri referans tipli, bunların dışında kalan veri türleri ise değer tiplidir.
Tür Dönüşümleri
Veri türleri arasında dönüşüm yapmak mümkündür. Örneğin bazen byte tipindeki bir değişken int tipine dönüştürülmek istenebilir. Aynı şekilde string tipinde bir değişkenin sayısal bir değişken tipine dönüştürülerek matematiksel işlem yapılması istenebilir.
Tür dönüşümün de dönüşüm yapılacak veri türlerinin kapasiteleri önemlidir. Küçük kapasiteli bir veri türü sorunsuzca büyük kapasiteli bir veri türüne dönüştürülebilirken, bunun tersi bir durumda veri kaybı söz konusu olabilir.
Tür dönüşümleri iki şekilde gerçekleştirilebilir.
Bilinçsiz Tür Dönüşümü (implicit); Küçük kapasiteli bir değişken tipinin yüksek kapasiteli bir değişken tipine dönüştürülmesi bilinçsiz tür dönüşümüdür. Çünkü herhangi bir veri kaybı söz konusu değildir. Örneğin 8 bit lik bir byte türünde ki bir değişken 32 bitlik int tipindeki bir değişkene dönüştürülebilir.
Örnek kullanım;
byte a;
int b;
a=10;
b=a;
Bilinçli Tür Dönüşümü (Explicit); Büyük kapasiteli bir değişken tipinden küçük kapasiteli değişken tipine dönüşüm yapıldığında veri kaybı yaşanabileceği için bu işlem engellenmiştir. Fakat oluşabilecek veri kaybının farkında olarak dönüşüm gerçekleştirilebilir.
Örnek kullanım; Aşağıdaki kod derlendiğinde hata ile karşılaşılır. Hata olarak int tipindeki bir değişkenin byte tipindeki bir değişkene bilinçsiz tür dönüşümü yapılamayacağına yöneliktir. Çünkü int veri tipi 32 bitliktir.
Dolayısıyla 8 bitlik bir byte değişkenine sığdırılamaz. Veri kaybı yaşanması muhtemeldir.
int a;
byte b;
a=10;
b=a;
Fakat bilinçli tür dönüşümü ile veri kaybı dikkate alınarak aşağıdaki kod bloğu ile dönüşüm gerçekleştirilebilir. Böyle bir ifadeyle derleyiciye veri kaybı olabileceğinin farkında olduğumuzu belirtmiş oluruz.
int a;
byte b;
a=10;
b=(byte) a;
Eğer a değişkeninin değeri 255in üzerinde olursa veri kaybı gerçekleşir.
int a;
byte b;
a=350;
b=(byte) a;
Tür dönüşümü için Convert sınıfı kullanılabilir. Bu sınıfa ait birçok tür dönüşüm metodu vardır. Fakat değişkenlerin CTS karşılıklarını bilmek gerekir.
Tablo 7. Değişken tipleri CTS karşılıkları ve Tür Dönüşümü
Tür CTS karşılığı Tür Dönüşüm
Metodunun Kullanımı
Bool Boolean Convert.ToBoolean(a)
Byte Byte Convert.ToByte(a)
Sbyte Sbyte Convert.ToSbyte(a)
Short Int16 Convert.ToInt16(a)
ushort UInt16 Convert.ToUInt16(a)
İnt Int32 Convert.ToInt32(a)
Uint UInt32 Convert.ToUInt32(a)
Tür CTS karşılığı Tür Dönüşüm
Metodunun Kullanımı
Long Int64 Convert.ToInt64(a)
Ulong UInt64 Convert.ToUInt64(a)
Float Single Convert.ToSingle(a)
double Double Convert.ToDouble(a)
decimal Decimal Convert.ToDecimal(a)
Char Char Convert.ToChar(a)
string String Convert.ToString(a)
Örnek kullanım;
int a;
string b;
b="5";
a=Convert.ToInt32(b);
Örnekte string türünden bir değişken tamsayı türüne dönüştürülmüştür. String değişkeni olan "b" de "5" değeri olduğu görülüyor. Bu değerin tamsayıya dönüştürülmesinde sıkıntı yoktur.
Fakat herhangi bir metinsel ifadenin sayısal bir ifadeye dönüştürülmesi söz konusu değildir. Hata ile karşılaşılır.
Dikkat edilecek dönüşümlerden bir tanesi de "char" tipinde bir değişkenin tamsayı tiplerinden birine dönüştürülmesidir. Böyle bir dönüşümde karakterin ascii kod karşılığı değer olarak döndürülür.
ASCII kod; Klavyeden girilen herhangi bir karakter, sayı ya da simgenin bilgisayar belleğinde saklanma biçimidir.
Örneğin 'A' karakterinin ASCII kod karşılığı 65'dir.
Örnek kullanım;
char x;
int a;
x='A';
a=Convert.ToInt32(x);
Kod bloğu derlendiğinde a değişkeninde 65 değeri olur.
String türüne dönüşüm aşağıdaki şekillerde yapılabilir.
Örnek kullanım;
int a;
string b;
a=10;
b=Convert.ToString(a); //b=a.ToString();
Değişkenlerin veri tipleri GetType() metoduyla öğrenilebilir. Dönen sonuç CTS karşılığıdır.
İnt a;
a=10;
Console.WriteLine(a.GetType());
Console.ReadKey();
Ekran Çıktısı:
System.Int32
Boxing ve Unboxing Kavramları
Değer tipinin referans tipine dönüştürülmesi boxing işlemidir. Bu işlemin tersi ise unboxing olarak adlandırılır.
static void Main(string[] args) {
int a=10;
object b=a; //boxing
int c = (int) b; //unboxing }
Bilindiği gibi değer tipler stack ta tutulurken, referans tipler heap te saklanır. Değer tipleri ile referans tipler arasında dönüştürme işlemi yapıldığında stack ta tutulan veri heap'e(boxing), heap'te tutulan veri stack'a(unboxing) kopyalanır.
Boxing ve unboxing işlemlerinden sonraki bellek bölgelerinin sembolik gösterimleri aşağıdadır. Kesik çizgili ok ile kopyalama yönü gösterilmiştir.
Boxing işleminden sonra;
Stack Heap
5
Adres a
b
5
Unboxing işleminden sonra;
Stack Heap
a 5
Adres 5
b c
5
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);
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;
Değişken Kapsama Alanları
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