Mastering C# Fundamentals: Creating Objects
mohamed Tayel
Posted on September 28, 2024
Meta Description: Learn how to create and use classes and objects in C#. Understand the difference between classes and instances, the role of constructors, and how to instantiate objects effectively for modular and maintainable code.
In C#, a class serves as a blueprint for creating real-world models. However, defining a class is just the beginning; to truly leverage it, you need to instantiate objects based on that class. This process is crucial in building meaningful applications, as it allows you to create individual entities—called instances—from your blueprints.
In this article, we'll dive deep into how to use a class, create instances from it, and understand the difference between a class and its objects.
What Are Classes and Objects?
A class is a template or a blueprint of a concept or structure, much like an architect's plan for a house. The class defines the attributes and behaviors that an instance can have. For instance, an Employee
class may define fields such as FirstName
and LastName
, but it's not tied to specific values until we create an instance of that class.
An object is an actual instance of the class. It’s a real representation that occupies memory space, with specific values assigned to the attributes defined in the class. Imagine creating multiple objects from the Employee
class, each representing a different employee: one with FirstName
as "John" and another with "Sara". These objects are distinct and have their own memory space.
Creating an Instance of a Class
The process of creating an instance of a class is called instantiation. In C#, this is done using the new
keyword, which is followed by the class name and brackets (to call the constructor). Let’s see how this works step by step:
Employee john = new Employee(1, "John", "Doe");
In this code:
-
Employee john
declares a variable namedjohn
of typeEmployee
. -
new Employee(...)
is the instantiation of an object, where we call the constructor to initialize the instance. - The constructor sets up the fields like
FirstName
,LastName
, etc., based on the arguments passed.
Constructors: Building Your Object
A constructor is a special method in C# used to create and initialize an object of a class. The constructor has no return type, and its name matches the class name.
If we do not define a constructor, C# provides a default constructor—an empty, parameterless constructor that initializes the object without setting specific values. However, in most real-world scenarios, we create our own constructors to set initial values, as shown below:
public class Employee
{
// Properties
public int EmployeeID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
// Constructor
public Employee(int employeeID, string firstName, string lastName)
{
EmployeeID = employeeID;
FirstName = firstName;
LastName = lastName;
}
}
In the above example:
- The constructor accepts parameters like
employeeID
,firstName
, andlastName
to initialize the new object. - This helps ensure that each object is created with all necessary information, making the code more predictable and consistent.
Overloaded Constructors
In many cases, we may want to initialize objects in different ways. C# allows us to overload constructors by defining multiple constructors with different parameter sets.
public Employee(int employeeID, string firstName, string lastName, double hourlyRate)
{
EmployeeID = employeeID;
FirstName = firstName;
LastName = lastName;
hourlyRate = hourlyRate;
}
With constructor overloading, we can create an instance with different levels of detail based on the parameters provided.
Using the new
Keyword and Accessing Members
Creating a new instance always involves the new
keyword, which is used to allocate memory for the object and call the appropriate constructor. Once we have an object, we can use the dot operator (.
) to access its members—properties or methods.
Employee john = new Employee(1, "John", "Doe");
john.PerformWork(); // Calling a method on the object
john.FirstName = "Jonathan"; // Modifying a property of the object
Here, the dot operator is used to invoke the PerformWork()
method and to change the value of FirstName
.
Reference Types and the Role of Constructors
In C#, classes are reference types. This means that the variable holds a reference (or memory address) to where the actual data is stored, rather than containing the data itself.
When you create an instance of Employee
using the new
keyword, the variable (john
in our example) does not directly contain the employee data but instead points to the memory location where the data is stored. This is different from value types, such as int
, where the variable contains the actual value.
Using Constructors to Set Initial Values
Let’s take a look at our Employee
class again, which has a constructor to set initial values:
public class Employee
{
public int EmployeeID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
// Constructor
public Employee(int employeeID, string firstName, string lastName)
{
EmployeeID = employeeID;
FirstName = firstName;
LastName = lastName;
}
// Method to perform work
public void PerformWork()
{
Console.WriteLine($"{FirstName} {LastName} is working.");
}
}
We can instantiate objects of the Employee
class like this:
Employee john = new Employee(1, "John", "Doe");
Employee sara = new Employee(2, "Sara", "Lee");
Each of these instances has its own unique values for FirstName
and LastName
, demonstrating how objects represent individual instances of a class.
The Default Constructor
By default, if you don't provide any constructor in your class, C# automatically creates one for you. This default constructor is parameterless, and it simply creates the instance without any specific initial values.
However, once you define a custom constructor, the default constructor is no longer automatically provided. If needed, you must explicitly define it:
public Employee()
{
// Optional default constructor
}
Invoking Methods on Objects
After creating an object, you can call its methods or change its properties:
// Creating an instance of Employee
Employee john = new Employee(1, "John", "Doe");
// Calling methods on the instance
john.PerformWork(); // Output: "John Doe is working."
// Modifying properties of the instance
john.FirstName = "Jonathan";
Console.WriteLine(john.FirstName); // Output: "Jonathan"
Simplified Syntax for Instantiation
With C# 9, you can use a shorthand syntax to instantiate objects:
var john = new Employee(1, "John", "Doe");
In this case, you omit writing the type again on the right-hand side. This can make the code shorter and more readable, depending on your preference.
Summary
In this article, we covered:
- Classes as blueprints used to create objects, which are real instances of those blueprints.
- The new keyword, which is used to create an instance or instantiate an object of a class.
- Constructors, which are special methods used to initialize objects. Constructors can be default or custom, and we can overload them for flexibility.
- Reference Types: Classes are reference types, meaning the variable holds a reference to the memory location of the actual object.
- Methods and Dot Operator: After creating an instance, we use the dot operator to access properties and methods of the object.
By understanding how to create and use classes and objects in C#, you are diving into the core of object-oriented programming. This knowledge forms the foundation for writing modular, reusable, and maintainable code that models real-world systems effectively.
Posted on September 28, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.