এনক্যাপসুলেশনের ব্যবহার :
C# এনক্যাপসুলেশনের ব্যবহার :
 C# এ কয়েক ভাবে এনক্যাপসুলেশন করা হয়ে থাকে যেমন –
মেথড এর ব্যবহার করে (২০০৭ এর পূর্বে):
মেথড ব্যবহার করে প্রাইভেট ফিল্ড একসেস ও মোডিফাই করতে পারেন যা আপনার ফিল্ডের এক্সেস নিয়ন্ত্রণ করতে এবং প্রয়োজনীয় বিসনেস লজিক ও ভ্যালিডেশন প্রয়োগে অনুমতি প্রদান করে।
Link : https://dotnetfiddle.net/A8JSes
using System;
public class Program
{
	public class Customer
	{
		private string name;
		public string GetName()
		{
			return name;
		}
		public void SetName(string value)
		{
			name = value;
		}
	}
	public static void Main()
	{
		// Can access Name through the GetName Method
		Customer customer = new Customer();
		customer.SetName(“Azad”);
		Console.WriteLine(customer.GetName());
	}
}
সাধারণত ওওপি (OOP) প্রোগ্রামিং ল্যাঙ্গুয়েজে getter/setter এভাবেই ব্যবহার করা হয়।
সাধারণত গেটার (getter) সেটার (setter) তৈরি করার জন্য
- Getter : গেট (Get) দিয়ে ফিল্ডের নাম (GetFieldName) , E.g. GetName
 - Setter: সেটার তৈরি জন্য সেট দিয়ে ফিল্ডের নাম (SetFieldName), E.g. SetName
 
২০০৭ এর আগে সাধারণত এভাবেই গেটার (getter) / সেটার (setter) তৈরি করা হত । কিন্তু এর পরে C# এ প্রপার্টি নামে একটি ফিচার এড করা হয় এই প্রপার্টি ফিচারটা নিয়ে আমরা নিচে কথা বলব। এই প্রপার্টি ফিচারটা সাধারণত এই গেটার (getter) / সেটার (setter) মেথডকে একটু সংক্ষিপ্ত করে এবং সহজ করে।
প্রপার্টিস এর ব্যবহার করে:
 যার মধ্যমে ফিল্ড এর এক্সেস কন্ট্রোল করার অনুমতি দিবে ও আপনি এর ভ্যালুতে সহজ এবং সুবিধাজনক ভাবে এক্সেস করতে পারবেন
Link : https://dotnetfiddle.net/3M6Dln 
using System;
public class Program
{
	public class Customer
	{
		private string name; // field / backing field
		// C# property
		public string Name
		{
			get
			{
				return name;
			}
			set
			{
				// Check if the name is empty or null
				if (string.IsNullOrEmpty(value))
				{
					// Throw an exception with a message
					throw new ArgumentNullException(“Name cannot be empty or null”);
				}
				name = value;
			}
		}
		// C# Auto property, doesn’t require, backing field
		public string DateOfBirth { get; set; }
	}
	public static void Main()
	{
		// Can access Name through the name property
		Customer customer = new Customer();
		customer.Name = “Azad”;
		Console.WriteLine(customer.Name);
		customer.Name = string.Empty; // it will throw exception with stacktrace, example in the output
	}
}
Azad Run-time exception (line 22): Value cannot be null. Parameter name: Name cannot be empty or null Stack Trace: [System.ArgumentNullException: Value cannot be null. Parameter name: Name cannot be empty or null] at Program.Customer.set_Name(String value) :line 22 at Program.Main() :line 39
  JAVA  এনক্যাপসুলেশনের ব্যবহার: 
 মেথড এর ব্যবহার করে: 
Link: http://tpcg.io/_I28ITR
public class Program {
    public static void main(String[] args) {
        Customer customer = new Customer();
        customer.setName(“Azad”);
        System.out.println(customer.getName());
    }
    public  class Customer {
        private String name;
        public String getName() {
            return name;
        }
        public void setName(String value) {
            name = value;
        }
    }
}
এনক্যাপসুলেশন মূলত আমাদের সুবিধাগুলো দেয় সেটাকে আমরা একটি ফিগারের মাধ্যমে বোঝার চেষ্টা করি।
- Data Hiding (Encapsulation is not directing information hiding but encapsulating fields)
 - Restrict
 - Data Validation