প্রাইভেট কনস্ট্রাকটর (Private Constructor)
কোন ক্লাসের বাইরে ওই ক্লাসের অবজেক্ট তৈরি বন্ধ করতে আমরা প্রাইভেট কনস্ট্রাকটর ব্যবহার করি। এটি প্রধানত Singleton ডিজাইন প্যাটার্নে ব্যবহার করা হয়। যা আমরা পরবর্তীতে ডিজাইন প্যাটার্ন সেকশনে আলোচনা করব।
//Java (জাভা) public class Employee { // Private constructor private Employee() { System.out.println(“No argument Constructor Invoked”); } } class TestEmployee { public static void main(String[] args) { // Uncomment this line to test // Employee e1 = new Employee(); // Error: Employee() has private access in Employee } }
//C# (সি#) using System; public class Employee { private Employee() { Console.WriteLine(“No argument Constructor Invoked”); } } class TestEmployee{ public static void Main(string[] args) { Employee e1 = new Employee(); } }
Output:
//Output (আউটপুট) ‘Employee.Employee()’ is inaccessible due to its protection level
উপরের উদাহরণ দুটিতে(C# & Java) আমরা Employee কনস্ট্রাকটরটিকে প্রাইভেট করে দেয়ায় অবজেক্ট তৈরি হচ্ছে না।
C# ল্যাঙ্গুয়েজ এ একটি ক্লাসের দুটি একই প্যারামিটার যুক্ত কনস্ট্রাক্টরের এক্সেস মডিফায়ার আলাদা হলে সে ক্ষেত্রেও অবজেক্ট তৈরি করা যাবে না। নিচের উদাহরণটি দেখি :
//C# (সি#) using System; public class Employee { public Employee() { Console.WriteLine(“public Constructor Invoked”); } private Employee() { Console.WriteLine(“private Constructor Invoked”); } } class TestEmployee{ public static void Main(string[] args) { Employee e1 = new Employee(); } }
Output:
//Output (আউটপুট) Type ‘Employee’ already defines a member called ‘Employee’ with the same parameter types
কিন্তু নিচের কোডটি কাজ করবে কারণ কনস্ট্রাক্টর দুটির প্যারামিটার ভিন্ন
using System; public class Employee { public Employee() { Console.WriteLine(“public Constructor Invoked”); } private Employee(String firstName) { Console.WriteLine(“private Constructor Invoked”); } } class TestEmployee{ public static void Main(string[] args) { Employee e1 = new Employee(); } }
Output:
//Output (আউটপুট) public Constructor Invoked