ููŠ ุญูŠุงุชู†ุง ุงู„ูˆุงู‚ุนูŠุฉุŒ ุงู„ุนุฑุจูŠุฉ ุชุนุชุจุฑ object. ุงู„ุนุฑุจูŠุฉ ุฏูŠ ู„ูŠู‡ุง attributes (ุฎุตุงุฆุต) ุฒูŠ ุงู„ูˆุฒู† ูˆุงู„ู„ูˆู†ุŒ ูˆู„ูŠู‡ุง methods ุฒูŠ ุฅู†ู‡ุง ุชู…ุดูŠ ุฃูˆ ุชูุฑู…ู„.

ุงู„ู€ Class ู‡ูˆ ู†ู‚ุฏุฑ ู†ู‚ูˆู„ ุฅู†ู‡ โ€œblueprintโ€ ุฃูˆ โ€œู…ุฎุทุทโ€ ุจู†ุณุชุฎุฏู…ู‡ ุนุดุงู† ู†ู†ุดุฆ ุงู„ู€ objects.

  • ุงู„ู€ Class ุจูŠุนุชุจุฑ ู…ู† ุถู…ู† Reference Types.
  • ุจูŠุฏุนู… ุญุงุฌุฉ ุงุณู…ู‡ุง ุงู„ู€ Inheritance.

ุงู„ู€ Class ู‡ูˆ ุจุจุณุงุทุฉ user-defined data type ุจูŠุนุฑู ุงู„ุญุงู„ุฉ (state) ูˆุงู„ุณู„ูˆูƒ (behavior) ู…ุน ุจุนุถ.

  • ุงู„ู€ State: ุจูŠู…ุซู„ ุงู„ุฎุตุงุฆุต (properties).
  • ุงู„ู€ Behavior: ุจูŠู…ุซู„ ุงู„ุฃูุนุงู„ (actions) ุงู„ู„ูŠ ุงู„ู€ objects ุชู‚ุฏุฑ ุชุนู…ู„ู‡ุง.

ู…ู…ูƒู† ู†ู‚ูˆู„ ุฅู† ุงู„ู€ Class ู‡ูˆ ุงู„ู…ุฎุทุท ุฃูˆ ุงู„ู‚ุงู„ุจ ุงู„ู„ูŠ ุจูŠูˆุตู ุชูุงุตูŠู„ ุงู„ู€ object.

ุฃู…ุง ุงู„ู€ ObjectุŒ ูู‡ูˆ ุนุจุงุฑุฉ ุนู† instance of a class (ู†ุณุฎุฉ ู…ู† ุงู„ูƒู„ุงุณ). ู„ู…ุง ุจุชุจุฏุฃ ุชุณุชุฎุฏู… ุงู„ู€ class ูˆุชุนู…ู„ ู…ู†ู‡ objectุŒ ู‡ู†ุง ุจูŠุจุฏุฃ ูŠุงุฎุฏ ู…ูƒุงู† ููŠ ุงู„ู€ memory.

Create a Class and Object

ู„ู…ุง ุจู†ูŠุฌูŠ ู†ุณู…ูŠ ุงู„ู€ ClassุŒ ุจู†ุณุชุฎุฏู… ุทุฑูŠู‚ุฉ Pascal case. ูˆู„ู…ุง ุจู†ุณู…ูŠ ุงู„ู€ parameters ุจุชุงุนุช ุงู„ู€ methodsุŒ ุจู†ุณุชุฎุฏู… Camel Case.

public class Car
{
	// This is an attribute or a field
	string color = "red";
 
	// The Main method
	static void Main()
	// The return type is void, meaning it doesn't return any value
	{
		// Create an object of the Car class
		Car myObj = new Car();
		Console.WriteLine(myObj.color);
	}
}

ุจู†ุณุชุฎุฏู… ูƒู„ู…ุฉ new ุนุดุงู† ู†ุนู…ู„ object ุฌุฏูŠุฏ. ูˆู…ู…ูƒู† ู†ุนู…ู„ ุฃูƒุชุฑ ู…ู† object ู…ู† ู†ูุณ ุงู„ู€ class:

class Car
{
  string color = "red";
 
  static void Main(string[] args)
  {
    // Create two objects from the Car class
    Car myObj1 = new Car();
    Car myObj2 = new Car();
    
    Console.WriteLine(myObj1.color);
    Console.WriteLine(myObj2.color);
  }
}

Class Members

ุฃูŠ ุญุงุฌุฉ ู…ูˆุฌูˆุฏุฉ ุฌูˆู‡ ุงู„ู€ class ู†ู‚ุฏุฑ ู†ู‚ูˆู„ ุนู„ูŠู‡ุง member ู…ู† ุงู„ูƒู„ุงุณ ุฏู‡. ุงู„ู€ members ู…ู…ูƒู† ุชูƒูˆู†:

  • ุงู„ู€ Data (ุจูŠุชู… ุชู…ุซูŠู„ู‡ุง ุนู† ุทุฑูŠู‚ fields).
  • ุงู„ู€ Behaviour (ุจูŠุชู… ุชู…ุซูŠู„ู‡ุง ุนู† ุทุฑูŠู‚ methods/functions).
  • ุงู„ู€ Property
  • ุงู„ู€ Event

ูƒู„ ูˆุงุญุฏ ู…ู† ุฏูˆู„ ุชู‚ุฏุฑ ุชุฎุตุต ู„ู‡ Access Modifiers ุฎุงุต ุจูŠู‡.

// The class is internal by default, or you can make it public
class MyClass
{
	// Class members
	string color = "red";     // This is a field or attribute
	int maxSpeed = 200;       // This is also a field
	
	// This is a method
	public void fullThrottle()
	{
		Console.WriteLine("I am the car");
	}
}

ุทุจุนู‹ุง ู…ู…ูƒู† ุชุฎู„ูŠ ุงู„ู€ fields ูุงุถูŠุฉ ู…ู† ุบูŠุฑ ู‚ูŠู…ุฉ ุงุจุชุฏุงุฆูŠุฉุŒ ูˆุชุจุฏุฃ ุชุฏูŠู‡ุง ุงู„ู‚ูŠู… ุฏูŠ ุจุนุฏ ู…ุง ุชุนู…ู„ ุงู„ู€ object.

class Car 
{
  // Declare fields without assigning values
  string model;
  string color;
  int year;
 
  static void Main(string[] args)
  {
    // Create the first object
    Car Ford = new Car();
    // Assign values to its fields
    Ford.model = "Mustang";
    Ford.color = "red";
    Ford.year = 1969;
 
    // Create the second object
    Car Opel = new Car();
    // Assign values to its fields
    Opel.model = "Astra";
    Opel.color = "white";
    Opel.year = 2005;
 
    Console.WriteLine(Ford.model);
    Console.WriteLine(Opel.model);
  }
}

ู…ู„ุญูˆุธุฉ ู…ู‡ู…ุฉ: ุงู„ู€ method ู„ุงุฒู… ุชูƒูˆู† public ุนุดุงู† ู†ู‚ุฏุฑ ู†ูˆุตู„ู‡ุง ู…ู† ุฎู„ุงู„ ุงู„ู€ object. ุงู„ุณุจุจ ุจุณูŠุท: ุงู„ู€ static method ุจู†ู‚ุฏุฑ ู†ูˆุตู„ู‡ุง ู…ู† ุบูŠุฑ ู…ุง ู†ุนู…ู„ object ู…ู† ุงู„ูƒู„ุงุณุŒ ุฃู…ุง ุงู„ู€ public not-static methods ูู…ุจู†ู‚ุฏุฑุด ู†ูˆุตู„ู‡ุง ุบูŠุฑ ุนู† ุทุฑูŠู‚ objects ุจุณ.


Instance vs. Static Members

ุนู†ุฏู†ุง ู†ูˆุนูŠู† ู…ู† ุงู„ู€ members:

Instance Members

ุงู„ู€ Instance Members ุจุชุจู‚ู‰ ู…ุฑุชุจุทุฉ ุจุงู„ู€ object ู†ูุณู‡ุŒ ูˆูƒู„ object ูŠู‚ุฏุฑ ูŠู†ุงุฏูŠ ุนู„ู‰ ุงู„ู€ instances ุงู„ุฎุงุตุฉ ุจูŠู‡.

var corn = new Person();
// Calling an instance method on the object
corn.Introduce();

Static Members

ุงู„ู€ Static Members ุจู†ู‚ุฏุฑ ู†ูˆุตู„ู‡ุง ู…ู† ุฎู„ุงู„ ุงู„ู€ class ู†ูุณู‡ ู…ุด ู…ู† ุฎู„ุงู„ object. ุจู†ุณุชุฎุฏู…ู‡ุง ููŠ ุงู„ุญุงุฌุงุช ุงู„ู„ูŠ ู…ุด ู…ู†ุทู‚ูŠ ุฅู†ู‡ุง ุชูƒูˆู† ู…ูˆุฌูˆุฏุฉ ููŠ ุฃูƒุชุฑ ู…ู† object.

  • ุฒูŠ Console.WriteLine(): ุฅุญู†ุง ุนู†ุฏู†ุง console ูˆุงุญุฏ ุจุณ ู‡ูˆ ุงู„ู„ูŠ ุจู†ุทุจุน ู…ู† ุฎู„ุงู„ู‡ุŒ ูˆุฏู‡ class.
  • ุฒูŠ DateTime.Now: ู…ุนุฑูุฉ ุงู„ูˆู‚ุช ุงู„ุญุงู„ูŠ ู…ุด ุญุงุฌุฉ ุฎุงุตุฉ ุจูƒู„ objectุŒ ุฏูŠ ุญุงุฌุฉ ุนุงู…ุฉ ู…ุฑุชุจุทุฉ ุจุงู„ูƒู„ุงุณ ู†ูุณู‡.
public class Person 
{
	// A static field belongs to the class itself
	public static int PeopleCount = 0;
}

Example

ู‡ู†ุง ู…ุซุงู„ ุจูŠูˆุถุญ ุงู„ูุฑู‚ ุจูŠู† ุงู„ุงุชู†ูŠู† ุนู…ู„ูŠู‹ุง.

Instance Method Example: ู‡ู†ุง ุงู„ู€ method ุงู„ู„ูŠ ุงุณู…ู‡ุง Parse ุจุชู†ุชู…ูŠ ู„ู„ู€ object. ุนุดุงู† ุชุณุชุฎุฏู…ู‡ุงุŒ ู„ุงุฒู… ุงู„ุฃูˆู„ ุชุนู…ู„ object ู…ู† ุงู„ู€ Person class.

// Instance
public class Person
{
    public string Name;
 
    public void Introduce(string to)
    {
        Console.WriteLine("Hi {0}, I am {1}", to, Name);
    }
 
    // This is an instance method
    public Person Parse(string str)
    {
        // It makes a new person object
        var person = new Person();
        person.Name = str;
        
        return person; 
    }
}
 
class Program
{
    public static void Main(string[] args)
    {
        // First, create an object
        Person person = new Person();
        // Then, call the instance method on that object
        var p = person.Parse("corn");
        p.Introduce("Pop");
    }
}

Static Method Example: ู‡ู†ุง ุงู„ู€ method ุงู„ู„ูŠ ุงุณู…ู‡ุง Parse ุจู‚ุช static. ุฏู‡ ู…ุนู†ุงู‡ ุฅู†ู‡ุง ุจุชู†ุชู…ูŠ ู„ู„ู€ class ู†ูุณู‡ุŒ ูˆู…ู…ูƒู† ุชู†ุงุฏูŠ ุนู„ูŠู‡ุง ู…ุจุงุดุฑุฉ ุจุงุณุชุฎุฏุงู… ุงุณู… ุงู„ูƒู„ุงุณ ู…ู† ุบูŠุฑ ู…ุง ุชุญุชุงุฌ ุชุนู…ู„ object.

// Static
public class Person
{
    public string Name;
 
    public void Introduce(string to)
    {
        Console.WriteLine("Hi {0}, I am {1}", to, Name);
    }
    
    // This is a static method
    public static Person Parse(string str)
    {
        // It makes a new person object
        var person = new Person();
        person.Name = str;
        
        return person; 
    }
}
 
class Program
{
    public static void Main(string[] args)
    {
        // Call the static method directly on the class
        Person person = Person.Parse("Corn");
        person.Introduce("Pop");
    }
}

Constructor

ุงู„ู€ Constructor ู‡ูˆ method ุฎุงุตุฉ ุจุชุดุชุบู„ ุฃูˆู„ ู…ุง ุจู†ุนู…ู„ object ุฌุฏูŠุฏุŒ ูˆู…ู…ูƒู† ู†ุนู…ู„ ุฃูƒุชุฑ ู…ู† constructor ูˆุงุญุฏ ููŠ ู†ูุณ ุงู„ู€ class.

Class Types

ููŠ ู„ุบุฉ C#ุŒ ููŠู‡ ุฃู†ูˆุงุน ู…ุฎุชู„ูุฉ ู…ู† ุงู„ู€ ClassesุŒ ูƒู„ ู†ูˆุน ู„ู‡ ุงุณุชุฎุฏุงู… ู…ุนูŠู†:

  1. ุงู„ู€ Concrete Class (Regular Class): ุฏู‡ ุงู„ูƒู„ุงุณ ุงู„ุนุงุฏูŠ ุงู„ู„ูŠ ุจู†ุณุชุฎุฏู…ู‡ ููŠ ู…ุนุธู… ุงู„ุฃูˆู‚ุงุช.
  2. ุงู„ู€ Abstract Class: ูƒู„ุงุณ ู…ุด ู…ูƒุชู…ู„ุŒ ูˆู„ุงุฒู… ุงู„ูƒู„ุงุณ ุงู„ู„ูŠ ู‡ูŠูˆุฑุซ ู…ู†ู‡ ูŠูƒู…ู‘ู„ ุงู„ุฃุฌุฒุงุก ุงู„ู†ุงู‚ุตุฉ.
  3. ุงู„ู€ Static Class: ุจู†ุณุชุฎุฏู…ู‡ ู…ุจุงุดุฑุฉ ู…ู† ุบูŠุฑ ู…ุง ู†ุนู…ู„ object.
  4. ุงู„ู€ Sealed Class: ู„ูˆ ู…ุด ุนุงูŠุฒ ุฃูŠ class ุชุงู†ูŠ ูŠูˆุฑุซ ู…ู†ู‡.
  5. ุงู„ู€ Partial Class: ู„ูˆ ููŠู‡ ุฃูƒุชุฑ ู…ู† ู…ุจุฑู…ุฌ ุดุบุงู„ูŠู† ุนู„ู‰ ู†ูุณ ุงู„ู€ class ูˆุญุงุจูŠู† ุชู‚ุณู…ูˆุง ุงู„ุดุบู„ ุนู„ู‰ ุฃูƒุชุฑ ู…ู† ู…ู„ู.