Properties in C#
Property is an extension of class variable and it provides a mechanism to
read, write or change the value of the class variable without
affecting the external way of accessing it.
Properties can contain one or two code
blocks called accessors and those are called
a get
accessor and set
accessor in C#. By using get
and set
accessors,
we can change the internal implementation of class variables and expose it without affecting
the external way of accessing it.
Generally, in object-oriented
programming languages like C# you need to define fields as private,
and then use properties to access their values in a public way
with get
and set
accessors.
The following is the syntax of defining
a property with get
and set
accessor
in C#.
<access_modifier> <return_type> <property_name>
{
get
{
//
return property value
}
set
{
// set a
new value
}
}
If you observe the above syntax, we used
an access modifier and return type to
define a property along with get
and set
accessors
to make required modifications to the class variables.
Here, the get
accessor
code block will be executed whenever the property is read and the code block
of set
accessor will be executed whenever the property is
assigned to a new value.
The properties are categorized as three
types in C#, these are.
Type |
Description |
Read-Write |
A property which contains a both get and set accessors,
then we will call it as read-write property. |
Read Only |
A property that contains only get accessor is called a read-only property. |
Write Only |
A property that contains only set accessor is called a read-only property. |
Properties won’t accept any parameters
and we should not pass a property as a ref or out parameter
in C#.
The following is a simple example of
defining a private variable and a property in C# language.
public class Person
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
If you observe the above sample code, we
defined a property called “Name” and we used a get
accessor
to return a property value and set
accessors to set a new value.
Here, the value keyword in set
accessor
is used to define a value that is being assigned by set
accessor.
In C#, the get
accessor
needs to be used only to return the field value or to compute it and return it
but we should not use it for changing the state of an object.
As discussed earlier, we can extend the
behavior of class variables using properties get
and set
accessors. The following code is an example of extending
the behavior of private variable in property using get
and set
accessors in
C#.
public class Person
{
private string name = "Musa Sule";
public string Name
{
get
{
return name.ToUpper();
}
set
{
if (value == "Gadabs")
name = value;
}
}
}
From the above example, we are extending
the behavior of private variable name using
a property called Name with get
and set
accessors
by performing some validations like to make sure Name value
equals to only “Gadabs” using set
accessor
and converting property text to uppercase with get accessor.
Here the field “name”
is marked as private so if you want to make any
changes to this field then we can do it only by calling the property (Name).
In C# properties, the get
accessor
will be invoked while reading the value of a property and when we assign a new
value to the property, then the set
accessor will be invoked by using
an argument that provides the new value.
The below code is an example of
invoking get
and set
accessors of properties in C#.
Person u
= new Person();
u.Name =
"Sakinat"; // set accessor will invoke
Console.WriteLine(u.Name);
// get accessor will invoke
Example of Get and Set in C# Properties
The following is an
example of defining properties with get and set accessors to implement required validations without
effecting the external way of using it in C#.
using System;
namespace CsharpnaijaTutorial
{
class Person
{
private string
location;
private string name = "Musa Sule";
public string
Location
{
get { return
location; }
set { location = value; }
}
public string Name
{
get
{
return name.ToUpper();
}
set
{
if (value == "Gadabs")
name = value;
}
}
}
class Program
{
static void Main(string[] args)
{
Person person = new Person();
// set accessor
will invoke
person.Name = "Sakinat";
// set accessor
will invoke
person.Location = "Abuja";
// get accessor
will invoke
Console.WriteLine("Name: " +
person.Name);
// get accessor
will invoke
Console.WriteLine("Location: " +
person.Location);
Console.WriteLine("\nPress Enter Key to Exit..");
Console.ReadLine();
}
}
}
If you observe above example, we are
extending the behaviour of private variables (name, location)
using properties (Name, Location)
with get
and set
accessors by performing some
validations like to make sure Name value is equals
to only “Gadabs” using set
accessor
and converting property text to uppercase with get
accessor.
When we execute the above program, we
will get the result as shown below.
From the above output
screen, our variable text converted to upper case and even after we set
variable text as “Sakinat”, it displayed text as “Musa Sule”
because of the set
accessor validation fails in the
property.
Creating Read-Only Properties
As earlier discussed, if a property
contains the only get
accessor, then its call a read-only property. The
following is the example of creating read-only properties in C# language.
using System;
namespace CsharpnaijaTutorial
{
class Person
{
private string _name;
private string _location;
public Person(string name, string location)
{
_name = name;
_location = location;
}
public string Name
{
get
{
return _name;
}
}
public string
Location
{
get
{
return _location;
}
}
}
class Program
{
static void Main(string[] args)
{
Person person = new Person("Musa Sule", "Abuja");
// compile
error
// u.Name =
"Sakinat";
// get accessor
will invoke
Console.WriteLine("Name: " +
person.Name);
// get accessor
will invoke
Console.WriteLine("Location: " +
person.Location);
Console.WriteLine("\nPress Enter Key to Exit..");
Console.ReadLine();
}
}
}
If we observe the above sample code, we
created a properties using only get
accessor to make the properties
are read-only based on our requirements.
In case, if we uncomment the commented
code then we will get a compile error because our Name property
doesn’t contain any set
accessor to set a new value. It’s
a just read-only property.
When you execute the above program, you
will get a result like as shown below.
Creating Write Only Properties
As earlier discussed, if a property
contains the only set
accessor, then its call a write-only property. Following
is the example of creating write-only properties in C#.
using System;
namespace CsharpnaijaTutorial
{
class Person
{
private string name;
public string Name
{
set
{
name = value;
}
}
private string
location;
public string
Location
{
set
{
location = value;
}
}
public void
GetPersonDetails()
{
Console.WriteLine("Name: " + name);
Console.WriteLine("Location: " + location);
}
}
class Program
{
static void Main(string[] args)
{
Person person = new Person();
person.Name = "Musa Sule";
person.Location = "Abuja";
// compile
error
//Console.WriteLine(u.Name);
person.GetPersonDetails();
Console.WriteLine("\nPress Enter Key to Exit..");
Console.ReadLine();
}
}
}
If you observe above sample code, we
created a properties using only set
accessor to make the properties are write-only based on our
requirements.
In case, if we uncomment the commented code then we will get a
compile error because our Name property
doesn’t contain any get
accessor
to return a value. It’s a just write-only property.
When you execute the above program, you will get a result like
as shown below.
Auto Implemented Properties in C#
A property is called as an
auto-implemented property when it contains accessors (get, set) without having any logic
implementation.
Generally, the auto-implemented properties are useful whenever
there is no logic implementation required in property accessors.
The following is an example of creating auto-implemented
properties in C# language.
using System;
namespace CsharpnaijaTutorial
{
class Person
{
public string Name { get; set; }
public string
Location { get; set; }
}
class Program
{
static void Main(string[] args)
{
Person person = new Person();
person.Name = "Musa Sule";
person.Location = "Abuja";
Console.WriteLine("Name: " +
person.Name);
Console.WriteLine("Location: " +
person.Location);
Console.WriteLine("\nPress Enter Key to Exit..");
Console.ReadLine();
}
}
}
Thank you
References
1. Tutlane
3. w3schools
4. microsoft
Comments
Post a Comment