Before going on properties lets have a look at why the concept of C# properties came into C#. The is because of two reasons:
- If the members of a class are private then how another class in C# will be able to read, write, or compute the value of that field.
- If the members of the class are public then another class may misuse that member.
Example:
// C# program to illustrate the problems // with public and private members using System; // public class public class C1 { // public data members public int rn; public string name; // private field // private int marks = 35; } // another public class public class C2 { // Main Method public static void Main(string[] args) { // Creating object of C1 class C1 obj = new C1(); // setting values to public // data members of class C1 obj.rn = 10000; obj.name = null; // setting values to private // data members of class C1 // obj.mark = 0; // display result Console.WriteLine("Name: {0} \nRoll No: {1}", obj.name, obj.rn); } }
Output:
Name: Roll No: 10000
Explanation: In above you can see that public members of class C1 can be accessed by class C2 and using the object “obj” of C1 it can provide the values to the members like Name is given value null but we don’t want this to be null. C2 cannot provide the value to the member “marks” because it is private in C1.
To test the private member access remove the comments and try to run and you can see the compiler will give an error. The Programming languages which do not have properties, use getter and setter methods to provide such access mechanism.
Using Properties
Properties are the special type of class members that provides a flexible mechanism to read, write, or compute the value of a private field. Properties can be used as if they are public data members, but they are actually special methods called accessors. This enables data to be accessed easily and helps to promote the flexibility and safety of methods. Encapsulation and hiding of information can also be achieved using properties.
It uses pre-defined methods which are “get” and “set” methods which help to access and modify the properties.
Accessors: The block of “set” and “get” is known as “Accessors”. It is very essential to restrict the accessibility of property. There are two type of accessors i.e. get accessors and set accessors. There are different types of properties based on the “get” and “set” accessors:
- Read and Write Properties: When property contains both get and set methods.
- Read-Only Properties: When property contains only get method.
- Write Only Properties: When property contains only set method.
- Auto Implemented Properties: When there is no additional logic in the property accessors and it introduce in C# 3.0.
The syntax for Defining Properties:
<access_modifier> <return_type> <property_name> { get { // body } set { // body } }
Where, <access_modifier> can be public, private, protected or internal. <return_type> can be any valid C# type. <property_name> can be user-defined. Properties can be different access modifiers like public, private, protected, internal. Access modifiers define how users of the class can access the property. The get and set accessors for the same property may have different access modifiers. A property may be declared as a static property by using the static keyword or may be marked as a virtual property by using the virtual keyword.
- Get Accessor: It specifies that the value of a field can access publicly. It returns a single value and it specifies the read-only property.
Example:
class Tech { // Declare roll_no field private int roll_no; // Declare roll_no property public int Roll_no { get { return roll_no; } } }
- Set Accessor: It will specify the assignment of a value to a private field in a property. It returns a single value and it specifies the write-only property.
Example:
class Tech { // Declare roll_no field private int roll_no; // Declare roll_no property public int Roll_no { get { return roll_no; } set { roll_no = value; } } }
Accessor Accessibility
- we can’t use accessor modifiers on an interface or an explicit interface member implementation.
- we can use accessor modifiers only if the property has both set and get accessors.
- If the property is an override modifier, the accessor modifier must match the accessor of the overridden accessor.
- The accessibility level on the accessor must be more restrictive than the accessibility level on the property.
Below are the programs to demonstrate different types of properties:
Program 1: To demonstrate the Read-Only property using “get” accessor.
// C# program to illustrate the // read-only property using System; public class Student { // Declare counter field as cnt private static int cnt; // to define constructor public Student() { // increment the counter // using constructor cnt++; } // Declare counter property public static int Counter { // read-only property get { return cnt; } } } class StudentTest { // Main Method public static void Main(string[] args) { // create three instances of // Student class it call constructor // three times which increase the counter Student s1 = new Student(); Student s2 = new Student(); Student s3 = new Student(); // s1.Counter = 10; // Compile Time Error: Can't set value of // Counter because it is read only. Console.WriteLine("Total No of Student: " + Student.Counter); // Program Give Warning // The variable `s1' is assigned but its value is never used } }
Output:
Total No of Student: 3
Program 2: To demonstrate the both read & write property using “get” and “set” accessors.
// C# program to illustrate the // read and write property using System; public class Student { // Declare name field private string name = "TechforTech"; // Declare name property public string Name { get { return name; } set { name = value; } } } class TestStudent { // Main Method public static void Main(string[] args) { Student s = new Student(); // calls set accessor of the property Name, // and pass "TAS" as value of the // standard field 'value'. s.Name = "TAS"; // displays TAS, Calls the get accessor // of the property Name. Console.WriteLine("Name: " + s.Name); } }
Output:
Name: TAS
Recent Comments