📖 Scenario: You are creating a simple program to represent a point in 2D space using a struct. This will help you understand how structs work in C# and how they behave differently from classes.
🎯 Goal: Build a C# program that declares a struct called Point with two integer fields, creates an instance of it, modifies its values, and prints the results to see how structs behave.
📋 What You'll Learn
Declare a struct named Point with two integer fields: X and Y.
Create a variable of type Point named p1 and set X to 5 and Y to 10.
Create a second variable p2 and assign it the value of p1.
Change p2.X to 20 and p2.Y to 30.
Print the values of p1 and p2 to observe the behavior of structs.
💡 Why This Matters
🌍 Real World
Structs are useful for small data containers like points, colors, or simple records where copying data is cheap and you want value-type behavior.
💼 Career
Understanding structs helps in writing efficient C# code, especially in game development, graphics programming, and performance-critical applications.
Progress0 / 4 steps
1
Declare the Point struct
Declare a struct named Point with two public integer fields: X and Y.
C Sharp (C#)
Hint
Use the struct keyword followed by the name Point. Inside, declare two public integer fields named X and Y.
2
Create and initialize p1
Create a variable called p1 of type Point and set p1.X to 5 and p1.Y to 10.
C Sharp (C#)
Hint
Declare p1 as a variable of type Point. Then assign 5 to p1.X and 10 to p1.Y.
3
Copy p1 to p2 and modify p2
Create a variable called p2 and assign it the value of p1. Then change p2.X to 20 and p2.Y to 30.
C Sharp (C#)
Hint
Assign p1 to p2 to copy the struct. Then change the fields of p2 to new values.
4
Print the values of p1 and p2
Write Console.WriteLine statements to print p1.X, p1.Y, p2.X, and p2.Y in the format shown: p1: X=5, Y=10 and p2: X=20, Y=30.
C Sharp (C#)
Hint
Use Console.WriteLine with string interpolation to print the values of p1 and p2 fields exactly as shown.
Practice
(1/5)
1. Which of the following statements about struct in C# is true?
easy
A. Structs support inheritance from other structs.
B. Structs are value types and are copied when assigned to a new variable.
C. Structs can have a parameterless constructor defined by the user.
D. Structs are reference types and stored on the heap.
Solution
Step 1: Understand struct type behavior
Structs in C# are value types, meaning when you assign them to another variable, a copy is made.
Step 2: Check inheritance and constructors rules
Structs cannot inherit from other structs or classes, and they cannot have user-defined parameterless constructors. They are stored on the stack, not the heap.
Final Answer:
Structs are value types and are copied when assigned to a new variable. -> Option B
Quick Check:
Struct = Value type copy [OK]
Hint: Remember: structs copy values, no inheritance, no default constructor [OK]
Common Mistakes:
Thinking structs are reference types
Assuming structs support inheritance
Trying to define parameterless constructors in structs
2. Which of the following is the correct way to declare a struct named Point with two integer fields x and y?
easy
A. struct Point { public int x; public int y; }
B. class Point { int x; int y; }
C. struct Point { int x; int y; }
D. struct Point { int x; int y; void Point() {} }
Solution
Step 1: Check struct field accessibility
Fields inside a struct should be declared with an access modifier like public to be accessible outside.
Step 2: Validate struct syntax
struct Point { int x; int y; } misses access modifiers, so fields are private by default and not accessible. class Point { int x; int y; } uses class, not struct. struct Point { int x; int y; void Point() {} } tries to define a constructor with void return type, which is invalid.
Final Answer:
struct Point { public int x; public int y; } -> Option A
Quick Check:
Struct fields need public modifier [OK]
Hint: Use public fields in structs for external access [OK]
Common Mistakes:
Omitting access modifiers on struct fields
Confusing struct with class keyword
Defining constructors with void return type
3. What is the output of the following C# code?
struct Point { public int X; public int Y; } Point p1 = new Point { X = 5, Y = 10 }; Point p2 = p1; p2.X = 20; Console.WriteLine(p1.X);
medium
A. 20
B. 10
C. 5
D. Compilation error
Solution
Step 1: Understand struct assignment behavior
Assigning p1 to p2 copies the values because structs are value types.
Step 2: Analyze modification effect
Changing p2.X to 20 does not affect p1.X, which remains 5.
Final Answer:
5 -> Option C
Quick Check:
Struct copy means original unchanged [OK]
Hint: Struct assignment copies values, original stays same [OK]
Common Mistakes:
Assuming structs behave like reference types
Expecting p1.X to change after modifying p2.X
Confusing output with Y field value
4. Identify the error in the following struct declaration:
struct Rectangle { public int Width; public int Height; public Rectangle() { Width = 0; Height = 0; } }
medium
A. Structs must inherit from System.ValueType explicitly.
B. Structs cannot have any constructors.
C. Fields must be private in structs.
D. Parameterless constructors are not allowed in structs.
Solution
Step 1: Recall struct constructor rules
Structs cannot have user-defined parameterless constructors; the compiler provides a default one.
Step 2: Check other options
Structs can have constructors with parameters, fields can be public, and inheritance from System.ValueType is implicit.
Final Answer:
Parameterless constructors are not allowed in structs. -> Option D
Quick Check:
No user parameterless constructor in struct [OK]
Hint: Structs get default parameterless constructor automatically [OK]
Common Mistakes:
Trying to define parameterless constructor in struct
Thinking structs must inherit explicitly
Believing fields must be private
5. You want to create a struct Color that stores red, green, and blue values as bytes. You also want to ensure that when you assign one Color variable to another, changes to the second do not affect the first. Which approach is correct?
hard
A. Declare Color as a struct with public byte fields and assign normally.
B. Declare Color as a class with public byte fields and assign normally.
C. Declare Color as a struct but use pointers to share data.
D. Declare Color as a class and override the assignment operator.
Solution
Step 1: Understand value vs reference types
Structs are value types, so assigning one struct variable to another copies the data, preventing shared changes.
Step 2: Evaluate options for data isolation
Using a class would create reference types, so changes to one variable affect the other. Using pointers or overriding assignment is unnecessary and complex.
Final Answer:
Declare Color as a struct with public byte fields and assign normally. -> Option A
Quick Check:
Struct assignment copies data, no shared changes [OK]
Hint: Use struct for independent copies of small data [OK]
Common Mistakes:
Using class instead of struct for value copy
Trying to share data with pointers unnecessarily
Overriding assignment operator in class (not allowed)
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.