struct vs Class
- structs are value types that can contain data and functions
- structs are value types and do not require heap allocation.
- structs directly store their data in the struct, classes store a reference to a dynamically allocated object.
- structs are useful for small data structures
- structs can affect performance
- Constructors are invoked with the new operator, but that does not allocate memory on the heap
- A struct constructor simply returns the struct value itself (typically in a temporary location on the stack), and this value is then copied as necessary
- With classes, multiple variables may have a reference to the same object
- It is possible for operations on one variable to affect the object referenced by the other variable.
- With structs, the variables each have their own copy of the data, and it is not possible for operations on one to affect the other.
- structs do not support user-specified inheritance, and they implicitly inherit from type object
Public struct PointStruct
{ public int x; public int y; public PointStruct(int x, int y) { this.x = x; this.y = y; } } static void Main(string[] args) { PointStruct ps = new PointStruct(); ps.x = 10; ps.y = 10; Console.WriteLine(“Initial struct values are “ + ps.x +”, “+ ps.y); ModifyStructPoint(ps); Console.WriteLine(“After ModifyStructPoint, struct values are “ + ps.x +”, “+ ps.y); } void ModifyStructPoint(PointStruct newStruct) { newStruct.x = 20; newStruct.y = 20; Console.WriteLine(“Inside ModifyStructPoint()”); Console.WriteLine(“Modified values are “ + newStruct.x +”, “+ newStruct.y); } Initial struct values are 10,10 Inside ModifyStructPoint() Modified values are 20,20 After ModifyStructPoint, struct values are 10,10 |
class PointClass
{ public int x; public int y; public PointClass(int x, int y) { this.x = x; this.y = y; } } static void Main(string[] args) { PointClass pc = new PointClass(10,10); Console.WriteLine(“Initial class values are “ + pc.x +”, “+ pc.y); ModifyClassPoint(pc); Console.WriteLine(“After ModifyClassPoint, class are “ + ps.x +”, “+ ps.y); } void ModifyClassPoint(PointStruct newPoint) { newPoint.x = 20; newPoint y = 20; Console.WriteLine(“Inside ModifyClassPoint()”); Console.WriteLine(“Modified values are “ + newPoint.x +”, “+ newPoint.y); } Initial class values are 10,10 Inside ModifyClassPoint() Modified values are 20,20 After ModifyClassPoint, struct values are 20,20 |