Open
Nesne Dayalı programlama (OOP)



C# Tipleri
Value Types (Değer Türü) (Ram-Stack) Reference Types (Referans Türü)(Ram-Heap)
Önceden Tanımlanmış Kullanıcı Tanımlamış Önceden Tanımlanmış Kullanıcı Tanımlamış
int,Bool,Float Struct,Enumerations Strings,Object(i nesne) Class,Interface,Delegate,Arrays,



Value Type Reference Type
Ram'ın Stack bölgesindedir. Ram'ın Heap bölgesindedir.
Null değeri olmaz. Null olabilir.
Scope tan çıkar çıkmaz Stack bölgede olduğu için temizlenir {} . C de Garbage Collector yoktur otomatik olmaz Çağrılması gerek.

Stack Heap
değişkinler kapsamdan çıkınca otomatik olarak bellekten yok olur. bloğun dışına çıktığında otomatik olarak yok olmaz çünkü C'de Garbage Collector yok
Hızlıdır. Yavaştır.


NULL Özellik

.NET ortamında olusturdugumuz nesneler tiplerine gore 2 çeşittir.
Bu tipler "REFERENCE TYPES" ve "VALUE TYPES" olarak ikiye ayrılmaktadir.

RAM uzerinde farkli konumdadırlar.
Referans tipler RAM uzerinde "Heap" bölümünde yer alırken, deger tipleri RAM uzerinde "Stack" bölümünde konumlanırlar...

Not:int,double,decimal gibi Value Type null olarak belirtilemezler.
int i = null; denilmez hata verir.Cannot convert null to 'int' because it is a non-nullable value type
Reference Types (Class,Delegate,String,Array) null olarak geçilebilir
Bir value type null olamaz ancak istisnai durumlar çıkabilir.
Bir value type üzerinde null tutabilmek..
1.Yol
Nullable<int> gelenID = new Nullable<int>();
gelenID = null;

2.Yol
int? gelenID = null;
gelenID = 1;


int sayi = 0;
String str = "";
btn.Dispose();

Nullable tipin Ekstra Özellikleri

sayi.Value : nesnenin uzerindeki degeri size teslim eder. Null ise null teslim eder.
sayi.HasValue : true false deger dondurur. Degerin olup olmadigini kontrol eder. ve durumu bildirir.

if (gelenID.HasValue)
{
  MessageBox.Show(gelenID.Value.ToString());
}

sayi.GetValueOrDefault(3) : Değer (Value) null olarak gelirse parantez içine yazılan deger kullanılır. Null değilse kendi degeri kullanılır

int? id =Request.QueryString["id"];
SqlCommand cmd = new SqlCommand ("select * from products where categoryID=@id",con)
cmd.Paramaters.AddWithValue("@id",id.GetValueOrDefault(1));


int? id = Request.QueryString["CatID"];
SqlCommand cmd = new SqlCommand("select * from products where categoryID=@id",con);
cmd.Parameters.AddWithValue("@id",id.GetValueOrDefault(1));



Değer Türü Kullanıcı Tanımlamış Değişkenler

Struct Yapı

Struct lar, sınıflar gibi verileri enkapsüle eder.
Lakin Value tipdedirler. Ram-Stack bölgede yer alırlar.
Sınıflar gibi kalıtım alamazlar.
Kuvveti fazla olmadığından kucuk projelerde kullanılır. Büyük projelerin kaderi buna baglanmaz.
Methodlar ve Degişkenler bir arada tutan özelliktir.
İngilizce'deki "Structure" kelimesinin kısaltılmış halidir

struct Metot
{ 
  public int SayininKaresi(string prm)
  {
     int sayi = Convert.ToInt32(prm);
     int sonuc = sayi * sayi;
     return sonuc;
  }
}
private void Button1_Click(object sender, EventArgs e)
{
  Metot metot = new Metot();
  int Donen = metot.SayininKaresi(textBox1.Text);

  label1.Text=Donen.ToString();
}
Kullanılan Kontroller           
Label  ID="label1" runat="server"
TextBox runat="server" ID="textBox1"
          



Enum (Enumerations)

Value Türü Enum, sabit secenekler demektir.
Her enumun arka planda tuttugu rakamsal bir id bulunmaktadir.
Saymaya 0'dan baslar. Varsayılan tipi integerdir.
Enum'un icindeki tum secenekleri almamızı saglayan yapi Enum.GetNames yapisidir.
Size string[] olarak tum degerleri teslim eder. Boylelikle dilediginiz .NET kontrolune rahatlıkla doldurabilirsiniz...

public enum Rol
{
    Admin, Editor, Guest, Developer
}
protected void Page_Load(object sender, EventArgs e)
{
    dropdownlist1.DataSource = Enum.GetNames(typeof(Rol)); //select kontrolümüz
    dropdownlist1.DataBind();

    
    string[] depListesi = Enum.GetNames(typeof(Rol));
    foreach (string item in depListesi)
    {
        ddListEnum.Items.Add(item);
    }
    ddListEnum.SelectedIndex = 0;
}
Eger bir Enum'u GetNames ile cekip bir kontrole doldurduysaniz ortak o enum uzerindeki degeri kaybetmistir. Bu degeri tekrar enum olarak geri almak icin, Enum.Parse metodu kullanilir...
ekle.Rol = (Rol)Enum.Parse(typeof(Rol), ddListEnum.SelectedItem.ToString());


Birkaç örnek

public enum Rol
{
Admin, Editor, Guest, Developer
}

    void Rolver(Rol r)
{
    if (r == Rol.Admin || r == Rol.Developer || r == Rol.Editor || r == Rol.Guest)
    {
        Response.Write("Hosgeldin Admin");
    }

}
protected void btn02_Click(object sender, EventArgs e)
{ 
    Rolver(Rol.Admin);
}
    

public class Insan 
{
    public string Ad { get; set; }
    public string Soyad { get; set; }
        
  public enum Lisan { İngilizce, Japonca,   Almanca,  Fransızca, İtalyanca }
  public Lisan YabanciDil { get; set; }  
}

public class Calisan : Insan, IDisposable  
{
    public virtual string Calis()
    {
            
        return "zor şartlarda çalışıyorum";
    }
    public void Dispose()
    {
        GC.SuppressFinalize(this);
    }
}

public class Mudur : Calisan
{
    public override string Calis()
    {
        return "Rahat Calisiyorum";
    }
}
virtual keyword u bu metotun ovveride edilebilmesini saglar..
Yani farkli verilerde aktaribilecegiz. Orn; rahat calisiyorum, huzurlu clsyorm.
Burda VİRTUAL olarak tanımladımız calis metodunu eziyoruz.. Böylece bu class a özel içeriğini değiştirebiliyoruz..
    
protected void Page_Load(object sender, EventArgs e)
{
    Mudur mudur = new Mudur();
    mudur.Ad = "Mr. X";
    mudur.YabanciDil = Insan.Lisan.İngilizce;
    Response.Write(mudur.Ad + mudur.YabanciDil);
}

Var = IMPLICITY TYPED LOCAL VARIABLES

Dinamik bir türdür.
Herhangi bir veri türüne atayabiliriz.
Sadece değişken yakalamak için kullanılan bir tiptir.
Bir nesnenin hangi tipte oldugundan emin değilseniz başına değişken tipi olarak "var" anahtar kelimesi eklenebilir.
Bu sayede sistem arkaplanda otomayik olarak dogru tipi bulur..
Bilinmeyen tipler olarak adlandirilan bu yapi, gecici olarak RAM uzerinde tipi belli olmayan bir veri grubu olusturur

var tip_1 = new { Adi = "Ko", Soyadi = "Gill" };
var tip_2 = new { Adi = "Onachinai", Soyadi = "Hayem" };
var tip_3 = new { Adi = "Pamyu", Soyadi = "Ds" };
var tip_4 = new { Adi = "Su", Soyadi = "K" };

var ogrenciDizisi = new[] { tip_1, tip_2, tip_3, tip_4 };
17.02.2020