Sarmalama / Paketleme (Encapsulation): Sınıfı oluşturan metot ve özelliklerin gerçekleştirme biçiminin, bu sınıfı kullanacak olan kullanıcılardan gizlenmiş olmasıdır.

Kapsüllemenin birinci adımı, kapsüllenecek field’ın private yapılmasıdır; çünkü public durumda, nesnenin ilgili bellek alanına hiçbir kontrol yapılmaksızın tüm değerler (o veri tipinin taşıyabileceği) atanabilir.

Çok istisnai durumlar (genelde bir takım sabitler – string.Empty, DBNull.Value gibi) dışında, hiçbir zaman public field’lar yazılmamalıdır.

Bu field’lara yapılan atamalar sırasında herhangi bir kontrol yapılmasa bile kesinlikle ve kesinlikle ve kesinlikle o field’ın private tanımlanması, field’a erişim için de get – set metotlarının yazılması gerekir!!!!!!!!

Konunun tam oturması açısında bir örnekle tamamlayayım.

class Personel
    {
        //Personelin yaş bilgisini saklamak üzere, en dar değer aralığına sahip tam sayı tipini seçtik.
        
        private byte _yas;
        private string _adSoyad;

        public void set_Yas(byte value)
        {
            if (value < 15 || value > 80)
                throw new ArgumentException("Yaş bilgisi 15-80 aralığında olmalıdır...");
            else
                _yas = value;
        }

        public byte get_Yas()
        {
            //Nesne kullanıcızı private field'a erişemeyecek; ancak public get_Yas() metoduna çağrıda bulunarak, o personele ilişkin yaş bilgisini öğrenebilecek..
            return _yas;
        }

        public void set_AdSoyad(string value)
        {
            if (value.Length < 5 || value.Length > 20)
                throw new ArgumentException("Ad Soyad 5-20 karakter arasında olmalıdır.");
            else
                _adSoyad = value;
        }

        public string get_AdSoyad()
        {
            return _adSoyad;
        }
    }
 static void Main(string[] args)
        {            
            Personel p = new Personel();
            
            //p.Yas = 50;
            //p.Yas = 250;
            

            p.set_Yas(15);
            Console.WriteLine(p.get_Yas().ToString());

            //Ad Soyad field'ını private yaptığımız ve tüm atamaları set bloğu üzerinden gerçekleştirdiğimiz için, günün birinde AdSoyad field'ına atanacak değere ilişkin bir kontrol kodu ilave edersek, programın farklı noktalarında değişiklik yapmamıza gerek kalmaz!
            p.set_AdSoyad("Deneme");

            Console.WriteLine(p.get_AdSoyad().ToString());

            
          
        }