Understanding Classes, Methods, and Properties in C#

By Anand Narayanaswamy

A class is the fundamental topic to be discussed in any Object-Oriented Programming (OOP) language. This also is true with C#. Basically, we have to discuss the meaning of class with reference to an object also. This is because these two words are more or less interrelated. A class is a combination of related objects whereas each object is an instance or a copy of the corresponding class.

From the figure given below (see Figure 1), we can judge the fact that Telephone is a combination of Sony, Ericcson, Panasonic, and Siemens. Hence, Telephone is a class and the other four are its objects. Here, Compaq and HP can't be objects of the class Telephone. In C#, a class is a user-defined reference type. We create an object out of the classes by using the "new" keyword and by applying the general syntax as shown in Listing 1:

Listing 1

Classname objectname = new Constructor();

We will discuss constructors later. Therefore, to create an object for our class Telephone, you have to code as shown in Listing 2:

Listing 2

Telephone T= new Telephone();



Click here for a larger image.

Figure 1 - Structure of a Class

To access any variable by using the above object name, we use the dot operator as shown in Listing 3:

Listing 3

using System;
class Access
{
  //Variables declared outside the main.
  int x = 100;
  int y = 200;

  public static void Main()
  {
    //Object created
    Access a = new Access();

    //Instance variables called
    Console.WriteLine(a.x);
    Console.WriteLine(a.y);
  }
}

In Listing 3, the variables are declared outside the main method. Hence, they are called Instance Variables. You have to create an object only for accessing an Instance variable. The additional memory created out of the object creation are automatically destroyed by the C# Garbage Collector.

Methods

In this session, we will deal with Methods. The various types of methods will be discussed in detail.

Methods are blocks of code that perform some kind of action, or carry out functions such as printing, opening a dialog box, and so forth. There are two kinds of methods in C#, as there are in Java. They are:

  • Instance Method
  • Static Method

Let's discuss each of these in detail. Instance Methods are methods declared outside the main method and can be accessed only by creating an object of the corresponding class, as shown in Listing 4:

Listing 4

using System;
class Instmethod
{
  //Method declared outside the main.
  void show()
  {
    int x = 100;
    int y = 200;
    Console.WriteLine(x);
    Console.WriteLine(y);
  }

  public static void Main()
  {
    //Object created
    Instmethod a = new Instmethod ();

    //Instance method called
    a.show();
  }
}

Class methods also are declared outside the main method but can be accessed without creating an object of the class. They should be declared with the keyword static and can be accessed using the classname.methodname syntax. This is illustrated in Listing 5. Similarly, you also can create class variables.

Listing 5

using System;
class Statmethod
{
  //A class method declared
  static void show()
  {
    int x = 100;
    int y = 200;
    Console.WriteLine(x);
    Console.WriteLine(y);
  }
  
  public static void Main()
  {
    // Class method called without creating an object of the class
    Statmethod.show();
  }
}

Declaring Methods with Parameters

You can declare methods with a variable name or names as a parameter, as shown in Listing 6:

Listing 6

void display(int x) { }

At the time you access the method, you should pass a value to the same, as in the code snippet shown in Listing 7:

Listing 7

//object S created
S.display(50);

The complete code to illustrate the above concept is shown in Listing 8:

Listing 8

using System;
class Pmethod
{
  //Method declared with two parameters x and y of type integer
  void show(int x , int y)
  {
    Console.WriteLine(x);
    Console.WriteLine(y);
  }

  public static void Main()
  {
    //Object created
    Pmethod a = new Pmethod ();

    //Method called by passing two integer values
    a.show(200,250);
  }
}

Method Overloading

In the preceding example, we declared a single method with a single parameter. But you can declare the signature of the same method once again in the same class but with different parameters. The parameters should be different. If not, the C# compiler would show errors. Listing 9 clearly explains this concept.

Listing 9

using System;
class Overloadmethod
{

  //Method declared with one integer parameter
  void show(int x)
  {
    Console.WriteLine(x);
  }

  //Method declared with two integer parameters
  void show(int a, int b)
  {
    Console.WriteLine(a);
    Console.WriteLine(b);
  }

  public static void Main()
  {
    //Object created
    Overloadmethod a = new Overloadmethod ();

    //Methods called by passing respective values
    a.show(100);
    a.show(300,500);
  }
}

Properties

Properties provide added functionality to the .NET Framework. Normally, we use accessor methods to modify and retrieve values in C++ and Visual Basic. If you have programmed using Visual Basic's ActiveX technology, this concept is not new to you. Visual Basic extensively uses accessor methods such as getXXX() and setXXX() to create user-defined properties.

A C# property consists of:

  • Field declaration
  • Accessor Methods (getter and setter methods)

Getter methods are used to retrieve the field's value and setter methods are used to modify the field's value. C# uses a special Value keyword to achieve this. Listing 10 declares a single field named zipcode and shows how to apply the field in a property.

Listing 10

using System;
class Propertiesexample
{

  //Field "idValue" declared
  public string idValue;

  //Property declared
  public string IdValue
  {

    get
    {
      return idValue;
    }
    set
    {
      idValue = value;
    }
  }

  public static void Main(string[] args)
  {

    Propertiesexample pe = new Propertiesexample();
    pe.IdValue = "009878";
    string p = pe.IdValue;
    Console.WriteLine("The Value is {0}",p);
  }
}

If you look at the MSIL generated by the code in Listing 10, you can view two methods, as shown in Listing 11:

Listing 11

Address::get_Zip() and Address::set_Zip().

We have reproduced the code for your reference. On careful scrutiny, you can see that the set_zip() method takes a string argument. This is because we have passed a string value while accessing the property. It's illegal to call these methods directly in a C# program.

In the preceding code, the Address.zipcode property is considered a read and write property because both getter and setter methods are defined. If you want to make the property read-only, omit the set block and to make it write only, omit the get block.

About the Author

Anand Narayanaswamy works as a freelance Web/Software developer and technical writer. He runs and maintains learnxpress.com, and provides free technical support to users. His areas of interest include Web development, software development using Visual Basic, and in the design and preparation of courseware, technical articles, and tutorials. He can be reached at anand@learnxpress.com.



About the Author

Anand Narayanaswamy

Anand Narayanaswamy (Microsoft MVP) is a freelance writer for Developer.com and Codeguru.com. He works as an independent consultant and runs NetAns Technologies (http://www.netans.com)which provides affordable web hosting services. He is the author of Community Server Quickly (http://www.packtpub.com/community-server/book). Anand also runs LearnXpress.com (http://www.learnXpress.com) and Dotnetalbum.com (http://www.dotnetalbum.com) and regularly contributes product and book reviews for various websites. He can be reached at ananddotnet@yahoo.co.in

Comments

  • class, methods and properties and all!

    Posted by raosir on 01/10/2014 11:56pm

    Outstanding Presentation! easy to understand and teach as well. Thanks a bunch and KEEP IT UP!

    Reply
  • Systems Analyst

    Posted by Vijay on 05/03/2013 01:26pm

    Presented in a very simple and easy to understand. Thank you!

    Reply
  • Instance of the class without fields

    Posted by Marina on 02/04/2013 09:13am

    What does it mean when class without fields is initiated, like in Instmethod a = new Instmethod (); What object is created at this moment, if the class has nothing but methods?

    Reply
  • A small correction

    Posted by Alexander Popov on 12/17/2012 12:44am

    'Telephone T= new Telephone();' A variable should never start with a capital letter, maybe rewrite as 'Telephone t= new Telephone();'

    Reply
  • Classes in C#`

    Posted by Nasir Ahmed U on 12/03/2012 10:48pm

    Really very nice article, U r doing good job. Keep it....

    Reply
  • thank you

    Posted by sohel on 08/31/2012 12:03pm

    thank you very much..this has help me a lot.

    Reply
  • About the article

    Posted by Indka on 06/17/2012 10:19pm

    very helpful article wrote very simply and understandable way. thank you and wish you to future articles.

    Reply
  • What Nonsense!... continued...

    Posted by Gasha on 03/21/2011 03:39am

    Thirdly, in text you've mentioned that C# uses "Value" keyword
    but in code, you are using as "value".
    This is confusing for new readers of a case-sensitive language
    specially for those who don't have .NET framework to figure out
    correct functionality instantly.

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • It's time high-level executives and IT compliance officers recognize and acknowledge the danger of malicious insiders, an increased attack surface and the potential for breaches caused by employee error or negligence. See why there is extra emphasis on insider threats.

  • Hurricane Sandy was one of the most destructive natural disasters that the United States has ever experienced. Read this success story to learn how Datto protected its partners and their customers with proactive business continuity planning, heroic employee efforts, and the right mix of technology and support. With storm surges over 12 feet, winds that exceeded 90 mph, and a diameter spanning more than 900 miles, Sandy resulted in power outages to approximately 7.5 million people, and caused an estimated $50 …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds