/* * :: Differences :: * 1. A struct is a value type where as class is a referance type. * 2. All the differences apply to value type and reference type are applicable here also. * 3. Structs are stored in stack and classes in heap. * 4. Value types holds there value in the memory where they created whereas reference type hold a reference to an object in memory. * 5. Value types are distroyed immediately after the scope is lost, whereas for reference types only * the reference variable is distroyed after the scope is lost. The object is later distroyed by garbage collector. * 6. When you copy a struct into another struct, a new copy of struct created and modification at one struct will not affect value contained by other. * 7. structs can't have destructors where as class can have. * 8. structs can't have explicit parameter less constructor where as a class can. * 9. structs can't inherit from another class where as a class can. Both structs and classes can inherit from an interface. * 10. A class or struct cannot inherit from another struct. Structs are sealed types. * 11. Since struct does not support inheritance, access modifier of a member of a struct cannot be protected or protected internal. * */ static void Main(string[] args) { #region Value types holds there value in the memory where they created whereas reference type hold a reference to an object in memory. // Value types are distroyed immediately after the scope is lost, whereas for reference types only // the reference variable is distroyed after the scope is lost. The object is later distroyed by garbage collector. int i = 1; if (i == 1) { int j = 10; Customer c = new Customer(); c.ID = 101; c.Name = "Anand"; } #endregion #region When you copy a struct into another struct, a new copy of struct created and modification at one struct will NOT affect value contained by other. int a = 10; int b = a; b = b + 1; a = a + 4; // This operation on a will not be reflected at b. Console.WriteLine("a = {0}, b = {1}", a, b); #endregion #region When you copy a class into another class, a only get a copy of reference variable, Both the variables point to the same onject on the heap and modification at one reference variable will affect value contained by other. Customer c1 = new Customer(); c1.ID = 100; c1.Name = "Anand"; Console.WriteLine("c1.ID = {0}, c1.Name = {1}", c1.ID, c1.Name); Customer c2 = c1; c2.Name = "Sahil"; // This operation on c2.Name will be reflected at c1.Name. Console.WriteLine("c1.ID = {0}, c1.Name = {1}", c1.ID, c1.Name); #endregion //Struct_1 s = new Struct_1(); //s.Equals(s); #region Example StructurePerson strX = new StructurePerson(); strX.LastName = "Bejaoui"; strX.FirstName = "Bechir"; StructurePerson strY = new StructurePerson(); strY.LastName = "Bejaoui"; strY.FirstName = "Bechir"; if (strX.Equals(strY)) { Console.WriteLine("strX = strY"); } else { Console.WriteLine("strX != strY"); }//This code displays strX = strY ClassPerson clsX = new ClassPerson(); clsX.LastName = "Bejaoui"; clsX.FirstName = "Bechir"; ClassPerson clsY = new ClassPerson(); clsY.LastName = "Bejaoui"; clsY.FirstName = "Bechir"; if (clsX.Equals(clsY)) { Console.WriteLine("clsX = clsY"); } else { Console.WriteLine("clsX != clsY"); }//This code displays clsX != clsY #endregion Console.ReadKey(); }
/* * :: Differences :: * 1. A struct is a value type where as class is a referance type. * 2. All the differences apply to value type and reference type are applicable here also. * 3. Structs are stored in stack and classes in heap. * 4. Value types holds there value in the memory where they created whereas reference type hold a reference to an object in memory. * 5. Value types are distroyed immediately after the scope is lost, whereas for reference types only * the reference variable is distroyed after the scope is lost. The object is later distroyed by garbage collector. * 6. When you copy a struct into another struct, a new copy of struct created and modification at one struct will not affect value contained by other. * 7. structs can't have destructors where as class can have. * 8. structs can't have explicit parameter less constructor where as a class can. * 9. structs can't inherit from another class where as a class can. Both structs and classes can inherit from an interface. * 10. A class or struct cannot inherit from another struct. Structs are sealed types. * 11. Since struct does not support inheritance, access modifier of a member of a struct cannot be protected or protected internal. */ static void Main(string[] args) { #region Value types holds there value in the memory where they created whereas reference type hold a reference to an object in memory. // Value types are distroyed immediately after the scope is lost, whereas for reference types only // the reference variable is distroyed after the scope is lost. The object is later distroyed by garbage collector. int i = 1; if (i == 1) { int j = 10; Customer c = new Customer(); c.ID = 101; c.Name = "Anand"; } #endregion #region When you copy a struct into another struct, a new copy of struct created and modification at one struct will NOT affect value contained by other. int a = 10; int b = a; b = b + 1; a = a + 4; // This operation on a will not be reflected at b. Console.WriteLine("a = {0}, b = {1}", a, b); #endregion #region When you copy a class into another class, a only get a copy of reference variable, Both the variables point to the same onject on the heap and modification at one reference variable will affect value contained by other. Customer c1 = new Customer(); c1.ID = 100; c1.Name = "Anand"; Console.WriteLine("c1.ID = {0}, c1.Name = {1}", c1.ID, c1.Name); Customer c2 = c1; c2.Name = "Sahil"; // This operation on c2.Name will be reflected at c1.Name. Console.WriteLine("c1.ID = {0}, c1.Name = {1}", c1.ID, c1.Name); #endregion //Struct_1 s = new Struct_1(); //s.Equals(s); #region Example StructurePerson strX = new StructurePerson(); strX.LastName = "Bejaoui"; strX.FirstName = "Bechir"; StructurePerson strY = new StructurePerson(); strY.LastName = "Bejaoui"; strY.FirstName = "Bechir"; if (strX.Equals(strY)) { Console.WriteLine("strX = strY"); } else { Console.WriteLine("strX != strY"); }//This code displays strX = strY ClassPerson clsX = new ClassPerson(); clsX.LastName = "Bejaoui"; clsX.FirstName = "Bechir"; ClassPerson clsY = new ClassPerson(); clsY.LastName = "Bejaoui"; clsY.FirstName = "Bechir"; if (clsX.Equals(clsY)) { Console.WriteLine("clsX = clsY"); } else { Console.WriteLine("clsX != clsY"); }//This code displays clsX != clsY #endregion Console.ReadKey(); }