Monday 6 June 2016

ஸ்டேடிக் கன்ஸ்ட்ரக்டர்,பிரைவேட் கன்ஸ்ட்ரக்டர் –என்ன வேறுபாடு?-சி#




சி ஷார்ப்பில் கன்ஸ்ட்ரக்டர் என்பது ஒரு சிறப்பு மெத்தட் ஆகும். இது ஒரு கிளாஸினுள் கிளாஸ் பெயரிலேயே எழுதப்பட்டிருக்கும்.இந்த கன்ஸ்ட்ரக்டர் ஆனது பொதுவாக ஆப்ஜெக்ட் உருவாக்கும் பொழுதெல்லாம் அழைக்கப்படுகின்றது.இது பொதுவாக எந்த மதிப்பையும் திரும்ப அனுப்பாது. எனவே இதை டிஃபைன் செய்யும் பொழுது ரிட்டர்ன் டைப் குறிப்பிடக் கூடாது(வாய்ட்(void) உட்பட).ஒரு கிளாஸினுள் எத்தனை கன்ஸ்ட்ரக்டர்கள் வேண்டுமானாலும் எழுதிக் கொள்ளலாம்.

கன்ஸ்ட்ரக்டர் எப்பொழுதெல்லாம் அழைக்கப்படுகின்றது?

1.   அந்த கிளாஸிற்கு new operator மூலம் ஆப்ஜெக்ட் க்ரியேட் செய்யும் பொழுது
2.   இதே கிளாஸின் மற்ற கன்ஸ்ட்ரக்டரிலிருந்து this() keyword மூலம் அழைக்கப்படும் பொழுது
3.   சைல்ட் கிளாஸின் கன்ஸ்ட்ரக்டரிலிருந்து base() key word மூலம் அழைக்கப்படும் பொழுது.

கன்ஸ்ட்ரக்டர் வகைகள்:

1.   டீஃபால்ட் கன்ஸ்ட்ரக்டர்(default constructor)
2.   பராமீட்டரைஸ்டு கன்ஸ்ட்ரக்டர்(parameterized constructor)
3.   காப்பி கன்ஸ்ட்ரக்டர்(copy constructor)
4.   ஸ்டேடிக் கன்ஸ்ட்ரக்டர்(static constructor)
5.   பிரைவேட் கன்ஸ்ட்ரக்டர்(private constructor)

டீஃபால்ட் கன்ஸ்ட்ரக்டர்(default constructor)

எந்த பராமீட்டரையும் ஏற்காத கன்ஸ்ட்ரக்டர் டீஃபால்ட் கன்ஸ்ட்ரக்டர்(default constructor) எனப்படும்.இதன் குறையானது ஒரு கிளாஸின் எல்லா ஆப்ஜெக்டுகளும் ஒரே மதிப்பைக் கொண்டிருக்கும்.
ஒரு கிளாஸினுள் எந்த கன்ஸ்ட்ரக்டரும் எழுதப்படவில்லையென்றால் கம்பைலரானது தானாகவே டீஃபால்ட் கன்ஸ்ட்ரக்டர் எழுதிகொள்ளும்.

சான்று நிரல்-1

using System;

namespace Constructor1
{
    class Student
    {
        private String SName;
        private int mark;
        public Student()          //default constructor
        {
            SName = "karthikeyan";
            mark = 85;
        }
        public void print()
        {
            Console.WriteLine(SName + " has scored " + mark+” marks.”);
        }

        static void Main(string[] args)
        {
            Student s1 = new Student();
            s1.print();
            Console.ReadLine();
        }
    }
}
Output:
Karthikeyan has scored 85 marks.

பராமீட்டரைஸ்டு கன்ஸ்ட்ரக்டர்(parameterized constructor)

குறைந்த பட்சம் ஒரு பராமீட்டரையாவது ஏற்கும் கன்ஸ்ட்ரக்டர் பராமீட்டரைஸ்டு கன்ஸ்ட்ரக்டர்(parameterized constructor) எனப்படும்.இதன் நிறையானது ஒரு கிளாஸின் வெவ்வேறு ஆப்ஜெக்டுகளில் வெவ்வேறு மதிப்புகளிருத்தப்படலாம்.

சான்று நிரல்-2

using System;

namespace Constructor2
{
    class Student
    {
        private String SName;
        private int Marks;
        public Student()  //default  constructor
        {
            SName = "";
            Marks = 0;
        }
        public Student(String SN, int Ma)//parameterized constructor
        {
            SName = SN;
            Marks = Ma;
        }
        public void display()
        {
            Console.WriteLine(SName + " has scored " + Marks + "marks.");
        }

        static void Main(string[] args)
        {
            Student s1 = new Student(“Ram", 92);
            Student s2 = new Student("Ganesh", 75);
            s1.display();
            s2.display();
            Console.ReadLine();
        }
    }
}
Output:
Ram has scored 92 marks.
Ganesh has scored 75 marks.

சான்று நிரல் -2 விளக்கம்.

மேலே உள்ள நிரலில் Student கிளாஸிற்கு இரு கன்ஸ்ட்ரக்டர்கள் எழுதப்பட்டுள்ளன.
முதலில் உள்ளது default constructor ஆகும் . இது எந்த மதிப்பையும் ஏற்கவில்லை.
இரண்டாவது உள்ளது parameterized constructor ஆகும். இது ஒரு String இன மதிப்பையும் , ஒரு int இன மதிப்பையும் ஏற்கின்றது.

காப்பி கன்ஸ்ட்ரக்டர்(copy constructor)

ஒரு ஆப்ஜெக்டின் மதிப்புகளை மற்றொரு ஆப்ஜெக்டின் மதிப்பிலிருந்து  இருந்து காப்பி செய்யப்பட காப்பி கன்ஸ்ட்ரக்டர்(copy constructor)உதவுகின்றது.
சான்று நிரல்-3
using System;

namespace Constructor3
{
    class Student
    {
        private String SName;
        private int Marks;
        public Student()  // default constructor
        {
            SName = "";
            Marks = 0;
        }
        public Student(String SN, int Ma) // parameterized constructor
        {
            SName = SN;
            Marks = Ma;
        }
        public Student(Student st)   //copy constructor
        {
            SName = st.SName;
            Marks = st.Marks;
        }
        public void display()
        {
            Console.WriteLine(SName + " has scored " + Marks + "marks");
        }

        static void Main(string[] args)
        {
            Student s1 = new Student("ram", 92);
            Student s2 = new Student("Ganesh", 75);
            Student s3 = new Student(s1);
            s1.display();
            s2.display();
            s3.display();
            Console.ReadLine();
        }
    }
}
Output:
Ram has scored 92 marks.
Ganesh has scored 75 marks.
Ram has scored 92 marks.

சான்று நிரல்-3 விளக்கம்.

மேலே உள்ள நிரலில்  Student s3 = new Student(s1);  என்கின்ற வரியானது copy constructor ஆனதை அழைக்கின்றது.s1-ல் உள்ள SName,Marks என்கின்ற இரு மதிப்புகளையும் s2-வில் காப்பி செய்யப்படுகின்றது . மேலே உள்ள நிரலில் s1,s3 என்கின்ற இரு ஆப்ஜெக்ட்களுமே ஒரே மதிப்புகளை கொண்டுள்ளன.இது copy constructor மூலமே சாத்தியமாகின்றது.

ஸ்டேடிக் கன்ஸ்ட்ரக்டர்(static constructor)

ஒரு கன்ஸ்ட்ரக்டரானது static என அறிவிக்கப்படும் பொழுது அது மொத்த ஆப்ஜெக்ட்களுக்கும் மொத்தமாக ஒரே ஒரு முறை தான் அழைக்கப்படுகின்றது.அதுவும் முதல் இன்ஸ்டன்ஸ் உருவாக்கப்படுவதற்கு  முதலிலேயே அழைக்கப்படுகின்றது.இது static ஃபீல்டுகளை மதிப்பிருத்த பயன்படுகின்றது.

ஸ்டேடிக் கன்ஸ்ட்ரக்டர்(static constructor) பற்றிய முக்கிய குறிப்புகள்

1.       Access  modifiers ஆனது இதில் கிடையாது.
2.       எந்த பராமீட்டரையும் ஏற்காது.
3.       நேரடியாக அழைக்க முடியாது.
4.       எப்பொழுது அழைக்க முடியும் என்பதில் நிரலாளர் கட்டுபடுத்த முடியாது.
5.       ஒரு நிரலின் இயக்க நேரத்தில் ஒரே ஒரு முறை மட்டும் இயக்க வேண்டிய வரிகளை இயக்க பயன்படுகின்றது.

சான்று நிரல்-4

using System;
namespace Constructor4
{
    class Test

    {
        static Test()  // static constructor
        {
            Console.WriteLine("static constructor");
        }
        public Test()  //instance constructor
        {
            Console.WriteLine("Instance Constructor");
        }
        static void Main(string[] args)
        {
            Test t1 = new Test();
            Console.ReadLine();
        }
    }
}

Output:
static constructor
Instance Constructor

சான்று நிரல்-4 விளக்கம்.

மேலே உள்ள நிரலில் static constructor ஒன்றும் instance constructor ஒன்றும் எழுதப்பட்டுள்ளது. static constructor ஆனது instance constructor இயக்கப்படுவதற்கு முன்பே அழைக்கப்படுவதை நிரலின் வெளியீட்டில் நோக்கவும்.

பிரைவேட் கன்ஸ்ட்ரக்டர்(private constructor)

Private constructor உள்ள கிளாஸை நீட்டுவிக்க(inherit செய்ய) இயலாது.மேலும் அந்த கிளாஸில் மற்ற public constructors இல்லாவிடில் அதற்கு ஆப்ஜெக்ட் உருவாக்க இயலாது.இது ஸ்டேடிக் மெம்பர்களை மட்டுமே கொண்டுள்ள கிளாஸினில் பயன்படுகின்றது.
சான்று நிரல்-5
using System;

namespace Constructor5
{
    public class Test
    {
        public string param1, param2;
        public Test(string a, string b)
        {
            param1 = a;
            param2 = b;
        }
        private Test()  // Private Constructor
        {
            Console.WriteLine("Private Constructor with no prameters");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            // Here we can’t create instace for private constructor
            Test obj = new Test("hai", "muthu karthikeyan");
            Console.WriteLine(obj.param1 + " " + obj.param2);
            Console.ReadLine();
        }
    }
}

Output:
hai muthu karthikeyan

சான்று நிரல்-5 விளக்கம்.

மேலே உள்ள நிரலில் பராமீட்டர் அனுப்பாத ஆப்ஜெக்ட்களை உருவாக்க முடியாது. ஏனெனில் பராமீட்டர்களை அனுப்பாத constructor ஆனது private என அறிவிக்கப்பட்டுள்ளது.
பின் குறிப்பு:

Constructor Chaining


ஒரு கிளாஸின் கன்ஸ்ட்ரக்டர் ஆனது அதே கிளாஸின் மற்றொரு கன்ஸ்ட்ரக்டரில் இருந்தோ அல்லது சைல்ட் கிளாஸின் கன்ஸ்ட்ரக்டரில்  இருந்தோ அழைக்கப்படலாம். இந்த நிகழ்வு Constructor Chaining எனப்படுகின்றது.

அந்த கிளாஸ் ஆனது எந்த கிளாஸில் இருந்தும் inherit செய்யப்பட வில்லையெனில் chaining பின் வருமாறு அமையும்.
  1.  Static Constructor
  2. Instance Constructor
அந்த கிளாஸ் inherit செய்யப்பட்ட கிளாஸ் எனில் chaining பின் வருமாறு அமையும்.
  1. Derived Static Constructor
  2. Base Static Constructor
  3. Base Instance Constructor
  4. Derived Instance Constructor
   
நான் மதுரையில் 10th,+1,+2 மாணவர்களுக்கான (icse,cbse,samacheer) computer science lessons எடுத்து வருகின்றேன். மேலும் c,cpp,java,dotnet,php,tally,ms-office,photoshop,coreldraw class ஆகியனவும் நடத்தி வருகின்றேன்
தொடர்புக்கு:
91 9629329142


                                முத்து கார்த்திகேயன்,மதுரை.




 







No comments:

Post a Comment