15 Şubat 2019 Cuma

String bir Value Type mı? - Reference Type - Value Type

 using System;

using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 { class Program { static void ChangeReferenceType(string str3) { str3 = "Text 3"; } static void ChangeReferenceType(int int3) { int3 = 3; } static void ChangeReferenceType(Student student3) { student3.Name = "Student 3 Name"; } static void ChangeReferenceType(Array array2) { array2 = null; } public class Student { public string Name { get; set; } } static void Main(string[] args) { string str1 = "Text 1"; string str2 = str1; ChangeReferenceType(str1); Console.WriteLine(str1); //Text 1 Console.WriteLine(str2); //Text 1 // metot içindeki değişim durumu değiştirmedi. // Çünkü değişkenlerin Ram lokasyonları farklı. str1 = "Text 2"; Console.WriteLine(str1); //Text 2 Console.WriteLine(str2); //Text 1 Console.WriteLine("---"); // str1 = "Text 2" eşitliği; str2 nin değerini değiştirmedi. // Çünkü yukarıda belirtildiği üzere; // değişkenlerin Ram lokasyonları farklı. // string'in data type'ı --> REFERENCE TYPE'dır. VALUE TYPE DEĞİLDİR. // Tanım: Eğer bir data type; kendi VALUE'sini RAM'in özel // bir lokasyonunda tutuyorsa o bir VALUE TYPE'dır. ( // Yani referans değil; value tutar RAM'de) // Value Type bir değişkeni bir metoda gönderirsek; // değişkenin değerinin KOPYASI GÖNDERİLİR. Yani bu metod; // bu değişkenin değerini değiştiremez, sadece // kendi metodu içinde o yeni değeri kullanabilir; // eski değeri yine eski değişkende kalır. DEĞİŞMEZ. // Örnekte görüldüğü üzere string -> Ram lokasyununa referans yapmadı. //Onun yerine değerini kopyaladı. Böylelikle kendi değeri değişmemiş oldu. //Sonuç: String, bir 'reference type' tan olan bir data type // olmasına rağmen bir value type gibi davrandı (örneğin integer gibi) //String'ler value type gibi davranır! int int1 = 1; int int2 = int1; ChangeReferenceType(int1); Console.WriteLine(int1.ToString()); //1 Console.WriteLine(int2.ToString()); //1 int1 = 2; Console.WriteLine(int1.ToString()); //2 Console.WriteLine(int2.ToString()); //1 Console.WriteLine("---"); // İnteger: Ram lokasyonuna referans yapmadı. // Kendi değerinini kopyaladı. // Böylelikle kendi değeri değişmemiş oldu. // Sonuç: integer bir 'value type' olarak; beklendiği üzere // RAM'de farklı lokasyonlara karşılık geliyor. Student student1 = new Student(); student1.Name = "Student1 Name"; Student student2 = student1; ChangeReferenceType(student1); Console.WriteLine(student1.Name); //Student 3 Name Console.WriteLine(student2.Name); //Student 3 Name Console.WriteLine("---"); // Class: Data Type'ı REFERENCE TYPE'dır. // Yani değeri değil ADRESİ gönderir. // Bu durumda bir metoda bir değişken yollanırsa; // değişkenin ADRESİ yollanır. // Yani iki değişken de RAM'de tek bir noktaya // işaret ettiği için metoddaki işlem, // değişkeni DEĞİŞTİRECEKTİR. string[] array1 = new string[3]; array1[0] = "Data 1"; array1[1] = "Data 2"; array1[2] = "Data 3"; Console.WriteLine(array1[0]); //Data 1 Console.WriteLine(array1[1]); //Data 2 Console.WriteLine(array1[2]); //Data 3 // Array'lar da String'ler gibi çalıştığı için; // doğal olarak onlar gibi davrandı. // Metod içindeki değişim asıl değişkeni değiştirmedi. ChangeReferenceType(array1); //integer: value type //string: reference type //class: reference type //array: reference type string str10 = "String Ten"; str10.ToUpper(); //str10'un bu noktadaki değeri = "STRING TEN" Console.WriteLine(str10); //String Ten // Görüldüğü üzere ToUpper metodunda oluşan değer // bizim değişkenimiz üzerine kaydedilmedi. Neden? // Çünkü string = Reference Type olduğu halde // bir Value Type'mış gibi davranır ve // RAM üzerinde ADRESLEME değil KOPYALAMA yapar. // Yani toUpper metodu yeni bir string değişkeni yarattı // (string'in yeni bir instance'ını oluşturdu ve bu // instance'ı dönderdi: dolayısıyla RAM'da farklı bir // lokasyonda bulunuyor) ve bunun değerini "STRING TEN" // olarak belirledi. Ama bu işlem bizim str10 değişkenimiz // üzerinde bir değişime sebep olmadı. // Çünkü onun RAM'deki lokasyonu farklı. // O halde; ToUpper metodundan çıkan sonucu kullanmak istiyorsak; // yeni bir değişken oluşturup sonucu buna yazdırmamız gerekir: string str20 = str10.ToUpper(); Console.WriteLine(str20); //STRING TEN Console.ReadKey(); // Sonuç: String sanıldığı gibi bir VALUE TYPE değildir. // REFERENCE TYPE'dır ama VALUE TYPE gibi davranır. } } }

22 Temmuz 2018 Pazar

Proje 1 - UnivApp




UnivApp

Proje, İngilizce dilinde yazılmıştır. ASP.Net MVC ile geliştirilmiştir. BootStrap kullanılmıştır.

Öğretmenler ders eklemekte, öğrenciler ise bu derslere kayıt olmaktadır. Öğretmenler belirli departmanlar içinde barınmaktadır.

Tablolar içerisinde One to Many, Many to Many ilişkileri kullanılmıştır.


Liste içindeki veriler ad, soyad, kayıt tarihi gibi bilgilere göre A'dan Z'ye kadar sıralanabilmektedir. Paging işlemi PagedList kullanılarak gerçekleştirilmiştir.


Öğrencilerin adına veya soyadına göre Search işlemi yapılabilmektedir.






Öğretmenler Listesi'nden herhangi bir öğretmen seçildiğinde, yeni bir liste oluşturularak bu liste içinde öğretmenin verdiği dersler gösterilmektedir.
Açılan yeni listede gösterilen dersler seçildiğinde yine yeni bir liste açılmakta, bu listede ise bu derslere kayıt yaptırmış olan öğrenciler gösterilmektedir.