static void Main(string[] args) { Product product1 = new Product(); product1.Id = 1; product1.CategoryId = 2; product1.ProductName = "Masa"; // 101 nolu bellek adresinde product1.UnitPrice = 500; product1.UnitsInStock = 3; // böyle de oluşturabiliriz Product product2 = new Product { Id = 2, CategoryId = 5, UnitsInStock = 5, ProductName = "Kalem", UnitPrice = 35 }; // genelde classların yanındaki değişkeni camel case versiyonu ile isimlendiririz // C#, Java'da Case Sensitive vardır (büyük küçük harf duyarlılığı) // PascalCase //camelCase ProductManager productManager = new ProductManager(); // Stack // Heap // referans tip oluşturabilmek için, heap'te oluşturabilmek için new'leriz productManager.Add(product1); Console.WriteLine(product1.ProductName); //----------------------------------------Örnekli Anlatım void nedir------------------------------------------------------ // productManager.Topla2(3, 6); // topladı ve 9 oldu ProductManager kısmında ekrana yazdırdı. // Peki neden return'e ihtiyaç var. Cevap basit sonucu başka bir yerde de kulllanabilmek için. void ile yap bitir dedik ve bitti. kullanamıyoruz. // int toplamaSonucu = productManager.Topla(3, 6); // Console.WriteLine(toplamaSonucu*2); // burada ise int veri tipinde toplamaSonucu adında bir değişkene aktarabildik (void'e aktaramayız) // böylece değişkeni console'da çağırabildik. //---------------------------------------Örnekli Anlatım referans------------------------------------------------------- // productManager.Add(product1); // buraya 101 nolu bellek adresi yollanıyor // Console.WriteLine(product1.ProductName); // cevabım Masa idi // yanlış, ProductName değeri Kamera oldu. Neden? // diziler classlar, abstract class, interface referans tip // ref tiplerde her şey, atamalar referansın numarası ile yapılır ( yani bellekteki adresi ile) // 101 nolu bellek adresini ProductManager aldı ve Name'ini Kamera olarak değiştirdi // 101 nolu ProductName yani kamerayı ekrana yazdırdık // ProductManager kısmındaki örnekle alakalı kısım // int sayi = 100; // productManager.BirSeyYap(sayi); // Console.WriteLine(sayi); // ProductManager'a gidip sayıyı 99 ile değiştirelim ve ekrana yazdıralım. sayı sonucunu ne yazacaktır? // tahminim sayı 99 olmuştur. çünkü sayı üstteki tanımda sabit kalmıyor olmalı. çünkü referans tipi değil. // yanlış, sayı'nın değeri 100 olarak kalmış. Neden? // sayısal olanlar int, double, bool değer tip // diğer bölüm bağımsız, yani burada sayıya 100 değerini verdik ve buradaki console ekranına sayı kelimesinden tamamen kopup 100 olarak geçti // ancak referans tiplerde şöyle - 29. satıra bak }
static void Main(string[] args) { //managerdan geldim Product product1 = new Product(); //101 product1.Id = 1; //1 numaralı ürün.. product1.CategoryId = 2; //2 numara mobilya kategorisi olsun.. product1.ProductName = "Masa"; product1.UnitPrice = 500; product1.UnitsInStock = 3; //manager classını yukardaki gibi yapabilirz.. Veyahut aşağıdaki gibi de yapabiliriz.. 2. ürünü farklı yolla yazalım (İstediğini kullan) Product product2 = new Product { Id = 2, CategoryId = 5, UnitsInStock = 5, ProductName = "Kalem", UnitPrice = 35 }; //elimizdeki bir ürünü eklemeyi simüle etmek istiyoruz.. Bunun için yazılmış bir classım var zaten: ProductManager..ProductManagerın Add metotunu kullanarak bu ekleme işlemini simüle etmek istiyoruz.. //nasıl ki kullanıcıdan bilgileri alarak böyle bir class oluştruyosam aynı şekilde PrpducktManagerı kullanarak benim product1 i yada 2yi alıp kullanıcıya göndermem gerekiyor.. //PascalCase //camelCase ProductManager productManager = new ProductManager(); //ProductManager türünde productManager adında yeni bir ProductManager (string isim = "Nida" burada string türünde isim tanımladık ve o Nida.. Diğeri de bu mantık işte..) // yeni bir referans numarası almış productManger.. productManager.Add(product1); //burada parametreleri ekliyoruz..Add ekle demek ya unutma, toparlan.. uyuyosun şu anda bunu okurken, biliyorum.. ProductManagera geçtim, Add kısmını ekleyeeğim.. Console.WriteLine(product1.ProductName); //---------------------------------------------------------KONU DIŞI ÖRNEKLER------------------------------------------------------------------------------------------------------------------ //şimdi gönderdiğimiz yerde kamera yazsın diyodu product1 in ProductName i nedir? (defterdeki örneğede bak) //CEVAP: KAMERA.. //NEDEN? //Geçen dersihatırla sayısal olan (int, double, bool..vs) veri tipleri için değer tip demiştik.. //Ama dizi, class,abstract class, interface... vs referans tiptir.. //Değer tiplerde atamalar tamamen değeri üzerinden olur ve bütün bağlantı kopar.. yani ben int sayi = 100; dediğimde BiseyYap fonksiyonuna int sayi yi yolladığımda aslında biz oraya sayının sadece değerini gönderiyoruz.. sayiyla o an bütün bağlantımız kopuyor.. //Bu yüzden ben metot kısmında BiseyYap fonksiyonunda 100 değerini (int sayi) gönderdiğimde buradaki int sayi ya eşitleniyor.. yani sayi = 100 dedikten sonra sayi yazan her yere 100 yazabilirsin.. onun eki artık kalkıyor, açıklaması kalkıyor.. //Ben orada sayi = 99 yaptım yani ordaki bağımsız olan ama değeri 100 olan sayiyi 99 yaptım.. bunun int sayi = 100; ile hiçbir alakası olmadığı için yazdırdığımda sonuç yine 100 çıkacaktır.. //ama referans tiplerde atamalar referansın numarasıyla yani bellekteki adresiyle yapılır.. //11. satırda new ile oluşturduğum değişkenin bellekteki adresi diyelim ki 101.. 101 numaralı bellek adresi üzerinden gidiyor yani bellekteki yerine referans vererek gidiyor.. bu yüzden ben oraya (satır 30) product ı yolladığımda 101 numaralı bellek adresini yolluyorum.. bellekteki fizziksel bir locasyonu yolluyorum.. //Bu yüzden burda benim manger kısmında satır 9da yolladığım şey product 101 numaralı bellek adresi oluyor.. Dolayısıyla 18. satırı okursak; 101 numaralı bellekteki yerde bulunan productın name ini Kamera yap diyor.. //bunlarda her şey referans numarası üzerinden gidiyor.. Şu anda 101 numaralı bellekteki product ın adı kamera oldu.. o yüzden ben program.cs de ben 31. satırdaki gibi 101. bellekteki veriyi okuduğumda Kamera yazacak.. //Bu sebeple cevap Kamera //////!!!!!!!!!!!!!!!!!!!!!! REFERANS VE DEĞER TİP ÖRNEKLERİ ÇOK ÖNEMLİ!!!!!!!!!!!!!!!!!////////////////// //(sayısal örnek defterde..) //---------------------------------------------------------KONU DIŞI AÇIKLAMALAR DEVAM--------------------------------------------------------------------------------------------------------------- // productManager.Topla2(3, 6); // (------2------) //yukarıda zaten productManager ı ProductManagerlaştırmıştık zaten.. (Ssatır 27) Bu şu demektir; ProductManager daki Topla2 yi çalıştır.. Sayılarım zaten 3 ve 6.. //bu gider PM sayfasına ve sayı değerlerini yerine koyduktan sonra yazar.. Amacımda buydu, ulaştım.. // int toplamaSonucu = productManager.Topla(3, 6); //(------1------) //şimdi biz buradaki toplama değerini yani int toplamSonucu return etme sebebimiz bu değeri başka yerlerde de kullanmak istememdi //mesela 2 ile çarpalım dersek: // Console.WriteLine(toplamaSonucu*2); //Gitti hesapladı önce sonra geri geldi ekrana yazdırmak istiyorum, üzerinde çalışmak istiyorum.. onu baaşka şekilde veya yerde kullanmak istiyorum.. //Bunun için returnları kullanıyoruz.. }
static void Main(string[] args) { Product product1 = new Product(); product1.Id = 1; product1.CategoryId = 2; // 1-> 2 numaranın arka planda mobilyaya karşılık geldiği varsayalım product1.ProductName = "Masa"; product1.UnitPrice = 500; product1.UnitsInStock = 3; Product product2 = new Product { Id = 2, CategoryId = 5, UnitsInStock = 5, ProductName = "Kalem", UnitPrice = 35 }; // 2-> Yukarıdaki gibi yazılabildiği gibi, Bu şekilde de yazılabilir. Genel olarak bu şekilde yazılır. // 3-> Bunlar gerçek hayatta bir yerden alınır. Biz normal şartlarda bu şekilde yazmayız. // 4-> PascalCase //camelCase ProductManager productManager = new ProductManager(); // 5-> ProductManager türünde productManager anlamına geliyor. // 6-> İsimlendirme kuralları önemli!!!!! // 7-> Case sensitive, c# büyük küçük harf duyarlıdır. // 8-> ProductManager türündeki productManager yeni bri referans numarası almış ProductManager'dir. productManager.Add(product1); // 9-> Ekranda, ürün bilgilerini girdiğimi varsayalım ve ürün ekleme butonuna bastım. // 10-> Sadece, productManager.Add() demekle olmaz. // 11-> Ekleyeceğim ama ne ekleyeceğim. // 12-> Ne ekleyeceğim, aslında parametre ile göndereceğim şeydir. // 16-> product1 yazdığımda, ekleme işlemini gerçekleştirecek. // 17-> product türünde nesneyi gönderdim. ProductManager'de product isminde tutuyor olacak. Console.WriteLine(product1.ProductName); //*************************************************************************** //*** *** //*** 18-> int, double, bool.... Değer Tip *** //*** 19-> Diziler, Cass, abstact class, interface... Referans Tip *** //*** *** //*************************************************************************** // 20-> Buraya gelsem desem ki // int sayi=100; // productManager.BiseyYap(sayi); // Console.WriteLine(sayi); // 21-> Bu şekilde yazdığımda, BiseyYap fonksiyonunun içerisinde ben sayi'ye eşit olan değeri yolluyorum // 22-> Yani, sayi=100 olduğundan, 100 değerini yolluyorum. Bu kadar. // 23-> BiseyYap fonksiyonuna gittiğinde orada da BiseyYap(int sayi) parametresi olduğundan, burası yeni bir "sayi" olmuş oluyor. // 24-> buradaki sayi'den bağımsız. ve bu sayiyi bu fonksiyon içerisinde değiştirdiğimizde burayı etkilemiyor. // 25-> Dolayısıyla; ekrana sayi değerini yazdırmak istediğimde 100 olarak karşıma çıkmış oluyor // 26-> Ama ama, ProductManager productManager = new ProductManager(); // 27-> productManager.Add(product1); // 28-> Console.WriteLine(product1.ProductName); // 29-> Gibi bir program yazdığımızda; Burası Referans Tip olmuş oluyor. Aslında Biz: // 30-> ProductManager productManager = new ProductManager(); bu satırda 101 gibi fiziksel bir odayı belirtiyoruz. // 31-> Bundan dolayı .Add işlemini yaptırdığımda o odaya gidiyor oradaki işlemi yapıyor, geliyor ve burada devam ediyor. // 32-> O odadaki işlemi değiştirdiği/ yaptığı için, burada ekrana yazdırma işlemimizde; (Mesela buradaki Masa'yı, fonks. içinde Kamera yaptık) // 33-> Odadaki değeri yazdırdığımız için, Masa değerini Kamera olarak değştirdiğimzden, Kamera İfadesini ekranda göreceğiz. }