Introduction: Why Variables in C#

ู„ูŠู‡ ุฃุตู„ุงู‹ ุจู†ุนู…ู„ ProgramsุŸ ุนุดุงู† ู†ุนุงู„ุฌ ู…ุนู„ูˆู…ุงุช ุฃูˆ ุจูŠุงู†ุงุช. ุฒูŠ ู…ุซู„ุงู‹ Program ุจุชุงุน ุจู†ูƒุŒ ู„ู…ุง ุจูŠุนู…ู„ูˆุง ู…ุนุงู…ู„ุฉุŒ ู‡ู…ุง ุจูŠุนุงู„ุฌูˆุง ุจูŠุงู†ุงุช ุฒูŠ ุฑู‚ู… ุงู„ุญุณุงุจุŒ ุงุณู… ุตุงุญุจ ุงู„ุญุณุงุจุŒ ุงู„ุฑุตูŠุฏ ูˆู‡ูƒุฐุง.

ุฃูŠ ุจูŠุงู†ุงุช ุฃูˆ ู…ุนู„ูˆู…ุงุช ุจู†ุนุงู„ุฌู‡ุงุŒ ู„ุงุฒู… ุชูƒูˆู† ู…ุชุฎุฒู†ุฉ ููŠ ู…ูƒุงู† ู…ุนูŠู†. ุงู„ู…ูƒุงู† ุฏู‡ ุจู†ุณู…ูŠู‡ Memory Location (ู…ูˆู‚ุน ููŠ ุงู„ุฐุงูƒุฑุฉ). ูƒู„ ุฌู‡ุงุฒ ูƒู…ุจูŠูˆุชุฑ ููŠู‡ Memory LocationsุŒ ูˆูƒู„ Memory Location ู„ูŠู‡ ุนู†ูˆุงู† (address) ุจูŠู…ูŠุฒู‡. ู…ู…ูƒู† ู†ุชุฎูŠู„ู‡ุง ุฒูŠ ูƒุฑุงุณูŠ ููŠ ุณูŠู†ู…ุงุŒ ูƒู„ ูƒุฑุณูŠ ู„ูŠู‡ ุฑู‚ู….

ุงู„ู€ Memory Locations ุฏูŠ ูƒู„ ูˆุงุญุฏ ู„ูŠู‡ ุนู†ูˆุงู†ุŒ ุงู„ุนู†ุงูˆูŠู† ุฏูŠ ู…ู…ูƒู† ู†ุนุชุจุฑู‡ุง ุฃุฑู‚ุงู… ุตุญูŠุญุฉ ู…ูˆุฌุจุฉ.

What is the relation between variable and memory locations?

ุงูุฑุถ ุนุงูŠุฒ ุฃุฎุฒู† ุงู„ู‚ูŠู…ุฉ 10 ููŠ ุงู„ู€ Memory. ุฒูŠ ู…ุง ุงู„ุทู„ุงุจ ููŠ ุงู„ูุตู„ ู…ู…ูƒู† ูŠู‚ุนุฏูˆุง ููŠ ุฃูŠ ูƒุฑุณูŠ ุจุดูƒู„ ุนุดูˆุงุฆูŠุŒ ุงู„ู‚ูŠู…ุฉ 10 ุฏูŠ ูƒู…ุงู† ู‡ุชุชุฎุฒู† ููŠ ุฃูŠ Memory Location ุจุดูƒู„ ุนุดูˆุงุฆูŠ.

How to Access the Data?

ุทุจ ุฏู„ูˆู‚ุชูŠ ู„ูˆ ุนุงูŠุฒ ุฃูˆุตู„ ู„ู„ุจูŠุงู†ุงุช ุฏูŠุŒ ูŠุนู†ูŠ ู„ู„ู‚ูŠู…ุฉ 10ุŒ ูˆุฃุทุจุนู‡ุง ู…ุซู„ุงู‹ุŸ ู‡ู‚ุงุจู„ ู…ุดูƒู„ุฉ. ู„ูŠู‡ุŸ ุนุดุงู† ู…ุด ู‡ุนุฑู ุฃุญุฏุฏ ุงู„ู€ Memory Location ุงู„ู„ูŠ ุงู„ุจูŠุงู†ุงุช ุงุชุฎุฒู†ุช ููŠู‡ ุจุงู„ุธุจุทุŒ ู„ุฃู†ู‡ุง ุงุชุฎุฒู†ุช ุจุดูƒู„ ุนุดูˆุงุฆูŠ. ุงู„ูˆุตูˆู„ ู„ู„ู€ Memory Location ุจูŠุจู‚ู‰ ุตุนุจ ุฌุฏุงู‹ ุจุนุฏ ุชุฎุฒูŠู† ุงู„ู…ุนู„ูˆู…ุงุช. ุทูŠุจ ุฅูŠู‡ ุงู„ุญู„ุŸ ู‚ุจู„ ู…ุง ุฃุฎุฒู† ุงู„ู…ุนู„ูˆู…ุงุชุŒ ู„ุงุฒู… ุฃุฏูŠ ู‡ูˆูŠุฉ (identity) ู„ู„ู€ Memory Location ุงู„ู„ูŠ ุงู„ุจูŠุงู†ุงุช ู‡ุชุชุฎุฒู† ููŠู‡.

How we can set Identity to Memory Locations?

ู†ู‚ุฏุฑ ู†ุฏูŠ ู‡ูˆูŠุฉ ู„ู„ู€ Memory Location ุจุงุณุชุฎุฏุงู… ุงู„ู€ VariablesุŒ ุฃูˆ ู…ู…ูƒู† ุชู‚ูˆู„ ุนู„ูŠู‡ุง Identifiers. ุงู„ู€ Syntax ุนุดุงู† ุชุนุฑู Variable ูˆุชุฏูŠ ู‡ูˆูŠุฉ ู„ู„ู€ Memory Location ููŠ C# ู‡ูˆ ูƒุงู„ุชุงู„ูŠ: ุงู„ุฃูˆู„ ุจู†ูƒุชุจ ุงู„ู€ data_type ูˆุจุนุฏูŠู† ุงู„ู€ Identifier (ุงุณู… ุงู„ู€ Variable).

Syntax: data_type Identifier;

ู…ุซุงู„: int a; ู‡ู†ุง ุงู„ู€ int ู‡ูˆ ุงู„ู€ data typeุŒ ูˆุงู„ู€ Identifier ู‡ูˆ โ€œaโ€. ู„ู…ุง ุจู†ุนุฑู Variable ูƒุฏู‡ุŒ ุจูŠุชู… ุชุฎุตูŠุต Memory ู„ูŠู‡. ุงู„ู€ Memory Location ุฏู‡ ุจูŠุงุฎุฏ ุงู„ู‡ูˆูŠุฉ ุงู„ู„ูŠ ู‡ูŠ ุงุณู… ุงู„ู€ Variable ุฒูŠ ู…ุง ููŠ ุงู„ุตูˆุฑุฉ:

ุงู„ู€ โ€œaโ€ ู‡ู†ุง ู‡ูˆ ุงุณู… ู„ู„ู€ Memory Location ุฑู‚ู… 10344. ุจุนุฏ ูƒุฏู‡ ู†ู‚ุฏุฑ ู†ุฎุฒู† ู‚ูŠู…ุฉ ููŠ ุงู„ู€ Memory Location ุฏู‡ ุงู„ู„ูŠ ู…ุชุนุฑู ุจู€ โ€œaโ€ ูƒุงู„ุชุงู„ูŠ:

ุงู„ู€ a = 10; // ู‡ู†ุง ุงู„ู‚ูŠู…ุฉ ู‡ูŠ 10 ูˆุจู†ุฎุฒู†ู‡ุง ููŠ ุงู„ู€ Memory Location ุงู„ู„ูŠ ู…ุชุนุฑู ุจู€ โ€œaโ€ ุฒูŠ ุงู„ุตูˆุฑุฉ:

ู…ุซุงู„ ุชุงู†ูŠ: ููŠ ุงู„ุณูŠู†ู…ุงุŒ ูƒู„ ูƒุฑุณูŠ ู„ูŠู‡ ุฑู‚ู… ู…ู…ูŠุฒุŒ ูˆู„ู…ุง ุจุชูŠุฌูŠ ุจุชู‚ุนุฏ ููŠ ุงู„ูƒุฑุณูŠ ุงู„ู„ูŠ ู…ุชุฎุตุตู„ูƒ. ุจุนุฏ ูƒุฏู‡ ู„ูˆ ุนุงูŠุฒ ูŠู†ุงุฏูˆูƒ ุฃูˆ ูŠูˆุตู„ูˆู„ูƒุŒ ูŠู‚ุฏุฑูˆุง ูŠูˆุตู„ูˆู„ูƒ ุจุณู‡ูˆู„ุฉ ุนู† ุทุฑูŠู‚ ุฑู‚ู… ุงู„ูƒุฑุณูŠ.

What is a Variable in C# Language?

ุงุณู… ุจู†ุฏูŠู‡ ู„ุฃูŠ Memory Location ููŠ ุงู„ูƒู…ุจูŠูˆุชุฑ ุฏู‡ ุจู†ุณู…ูŠู‡ Variable. ุงู„ู‡ุฏู ู…ู† ุงู„ู€ Variable ู‡ูˆ ุฅู†ู‡ ูŠุฏูŠ ุงุณู… ู„ู„ู€ Memory Location ุงู„ู„ูŠ ุจู†ุฎุฒู† ููŠู‡ ุจูŠุงู†ุงุช ู…ุนูŠู†ุฉ. ุงู„ู€ User ุจูŠูˆุตู„ ู„ู„ุจูŠุงู†ุงุช ุฏูŠ ุนู† ุทุฑูŠู‚ ุงุณู… ุงู„ู€ Variable ูˆุงู„ู€ Compiler ุจูŠูˆุตู„ ู„ู„ุจูŠุงู†ุงุช ุนู† ุทุฑูŠู‚ ุงู„ู€ memory address. ูŠุจู‚ู‰ ุงู„ู€ Variable ู‡ูˆ ู…ูƒุงู† ู…ุชุณู…ูŠ ููŠ Memory ุงู„ูƒู…ุจูŠูˆุชุฑุŒ ุงู„ุจุฑู†ุงู…ุฌ ูŠู‚ุฏุฑ ูŠุฎุฒู† ููŠู‡ ุงู„ุจูŠุงู†ุงุช.

Variables

  • ุงู„ู€ Variables ุฏูŠ ุฒูŠ ุญุงูˆูŠุงุช (containers) ุจู†ุฎุฒู† ููŠู‡ุง ู‚ูŠู… ุงู„ุจูŠุงู†ุงุช (data values).
  • ุงู„ู€ Variable ุฏู‡ ุจูŠุชุบูŠุฑ ู…ุน ุงู„ูˆู‚ุช ุญุณุจ ุงู„ู‚ูŠู…ุฉ ุงู„ู„ูŠ ุจู†ุฏูŠู‡ุงู„ู‡.
  • ู†ู‚ุฏุฑ ู†ุณุชุฎุฏู… ุฃูŠ ู†ูˆุน ู…ู† ุฃู†ูˆุงุน ุงู„ู€ data types ุงู„ู…ูˆุฌูˆุฏุฉ ููŠ CSharp Memory Management.

Declaring (Creating) Variables

ุงู„ู€ Variables ู‡ูŠ ุญุงูˆูŠุงุช ู„ุชุฎุฒูŠู† ู‚ูŠู… ุงู„ุจูŠุงู†ุงุช.

// type variableName = value;
string name = "Corn"; // Define a string variable and assign a value
int myNum = 15; // Define an integer variable and assign a value
 
// Declare without assigning
int myNum; // Declare an integer variable
// Assignment
myNum = 15; // Assign a value later
 
// if you assign a new value to an existing variable, it will overwrite the previous value
int myNum = 15; // Initial assignment
myNum = 20; // Reassigns the value, myNum is now 20
 
int myNum = 5; // Integer variable
double myDoubleNum = 5.99D; // Double variable
char myLetter = 'D'; // Character variable
bool myBool = true; // Boolean variable
string myText = "Hello"; // String variable

ุงู„ู€ Syntax ุนุดุงู† ุชุนุฑู Variable ููŠ C# ูƒุงู„ุชุงู„ูŠ: Syntax: data_type variable_name; Example: int age;

ุงู„ู€ Syntax ุนุดุงู† ุชุฏูŠ ู‚ูŠู…ุฉ ู…ุจุฏุฆูŠุฉ (initialize) ู„ู€ Variable ููŠ C# ูƒุงู„ุชุงู„ูŠ: Syntax: data_type variable_name = value; Example: int age = 20;

Multiple Variables

ุนุดุงู† ุชุนุฑู ุฃูƒุชุฑ ู…ู† Variable ู…ู† ู†ูุณ ุงู„ู†ูˆุนุŒ ู…ู…ูƒู† ุชุณุชุฎุฏู… ู„ุณุชุฉ ู…ูุตูˆู„ุฉ ุจู€ comma:

int x = 5, y = 6, z = 50; // Declare and initialize multiple int variables
Console.WriteLine(x + y + z); // Print the sum
 
// You can also assign the same value to multiple variables in one line
int x, y, z; // Declare multiple int variables
x = y = z = 50; // Assign the same value to all of them

Rules for variable declaration in C#

  1. ุงุณู… ุงู„ู€ Variable ู„ุงุฒู… ูŠุจุฏุฃ ุจุญุฑู ุฃูˆ ุนู„ุงู…ุฉ ุงู„ู€ underscore (_).
  2. ุงู„ู€ Variables ููŠ C# ุจุชูุฑู‚ ุจูŠู† ุงู„ุญุฑูˆู ุงู„ูƒุจูŠุฑุฉ ูˆุงู„ุตุบูŠุฑุฉ (case sensitive). ูŠุนู†ูŠ myVar ู…ุฎุชู„ูุฉ ุนู† myvar.
  3. ู…ู…ูƒู† ุชุชูƒูˆู† ู…ู† ุฃุฑู‚ุงู… ูˆุญุฑูˆู.
  4. ู…ุด ู…ุณู…ูˆุญ ุจุฃูŠ ุฑู…ูˆุฒ ุฎุงุตุฉ ุบูŠุฑ ุงู„ู€ underscore.
  5. ุฃู…ุซู„ุฉ ุนู„ู‰ ุฃุณู…ุงุก Variable ุตุญูŠุญุฉ: sum, Height, _value, abc123.

Types of Variables in a Class in C#

ููŠู‡ ุฃุฑุจุน ุฃู†ูˆุงุน ุฃุณุงุณูŠุฉ ู…ู† ุงู„ู€ Variables ู…ู…ูƒู† ู†ุนุฑูู‡ุง ุฌูˆู‡ ุงู„ู€ Class ููŠ C#:

  1. Non-Static/Instance Variable
  2. Static Variable
  3. Constant Variable
  4. Readonly Variable

ุจุงู„ุฅุถุงูุฉ ู„ู„ุฃู†ูˆุงุน ุฏูŠุŒ ููŠู‡ ุฃู†ูˆุงุน ุชุงู†ูŠุฉ ู„ูŠู‡ุง ุงุณุชุฎุฏุงู…ุงุช ุฎุงุตุฉ ุฒูŠ var, object, ูˆ dynamic. ู‡ู†ุชูƒู„ู… ุนู† ูƒู„ ู†ูˆุน ุจุงู„ุชูุตูŠู„.

Static and Non-Static Variables in C#

ู„ูˆ ุนุฑูู†ุง Variable ุตุฑุงุญุฉู‹ ุจุงุณุชุฎุฏุงู… ุงู„ู€ modifier ุงู„ู„ูŠ ุงุณู…ู‡ staticุŒ ุจู†ุณู…ูŠู‡ static variable. ูˆุจุงู‚ูŠ ุงู„ู€ Variables ูƒู„ู‡ุง ุจุชุจู‚ุง non-static variables (ุงูุชุฑุงุถูŠ). ู„ูˆ ุนุฑูู†ุง Variable ุฌูˆู‡ static block (ุฒูŠ ุงู„ู€ Main method ุงู„ู„ูŠ ู‡ูŠ static)ุŒ ูŠุจู‚ู‰ ุงู„ู€ Variable ุฏู‡ static variable. ูˆู„ูˆ ุนุฑูู†ุง Variable ุฌูˆู‡ non-static block (ุฒูŠ Method ุนุงุฏูŠุฉ ู…ุด static)ุŒ ูŠุจู‚ู‰ ุฏู‡ non-static variable.

ุนุดุงู† ู†ูู‡ู… ุฃูƒุชุฑุŒ ุจุต ุนู„ู‰ ุงู„ู€ Example ุฏู‡. ู…ุนุฑููŠู† ููŠู‡ ุชู„ุงุชุฉ Variables:

  • ุงู„ู€ Variable x ู‡ูˆ static variable ุนุดุงู† ู…ุชุนุฑู ุจู€ static.
  • ุงู„ู€ Variable y ู‡ูˆ non-static ุงูุชุฑุงุถูŠ.
  • ุงู„ู€ Variable z ู‡ูˆ static ุนุดุงู† ู…ุชุนุฑู ุฌูˆู‡ ุงู„ู€ Main method ุงู„ู„ูŠ ู‡ูŠ static.
using System;
namespace TypesOfVariables
{
    internal class Program
    {
        static int x; // Static Variable (Class level)
        int y; // Non-Static or Instance Variable (Class level)
        static void Main(string[] args)
        {
            int z; // Static Variable (Local to Static method)
        }
    }
}

ุฏู„ูˆู‚ุชูŠุŒ ุชุนุงู„ ู†ุญุงูˆู„ ู†ุทุจุน ู‚ูŠู…ุฉ x ูˆ y ุฌูˆู‡ ุงู„ู€ Main method. ุฎู„ูŠู†ุง ู†ุฏูŠู„ู‡ ู‚ูŠู…ุฉ ู…ุจุฏุฆูŠุฉ: x = 100 ูˆ y = 200. ุชู‚ุฏุฑ ุชุทุจุน ู‚ูŠู…ุฉ x ู…ุจุงุดุฑุฉ ุฌูˆู‡ ุงู„ู€ Main method. ู„ูƒู† ู…ุด ู‡ุชู‚ุฏุฑ ุชุทุจุน ู‚ูŠู…ุฉ y ู…ุจุงุดุฑุฉ.

using System;
namespace TypesOfVariables
{
    internal class Program
    {
        static int x = 100; // Static Variable initialized
        int y = 200; // Non-Static or Instance Variable initialized
        static void Main(string[] args)
        {
            Console.WriteLine($"x value: {x}"); // Accessing static variable directly
            Console.Read();
        }
    }
}

Output: x value: 100

ู„ูˆ ุญุงูˆู„ู†ุง ู†ุทุจุน ู‚ูŠู…ุฉ y ู…ุจุงุดุฑุฉุŒ ู‡ูŠุฌูŠู„ู†ุง Compile-time error ุจูŠู‚ูˆู„ an object reference is required for the non-static field, method, or property โ€˜Program.yโ€™. ูŠุนู†ูŠ ู…ุญุชุงุฌูŠู† Object ุนุดุงู† ู†ูˆุตู„ ู„ู€ y ุงู„ู„ูŠ ู‡ูŠ non-static. ุจุต ุนู„ู‰ ุงู„ู€ Example ุฏู‡ ุงู„ู„ูŠ ุจู†ุญุงูˆู„ ููŠู‡ ู†ุทุจุน x ูˆ y ู…ุจุงุดุฑุฉ:

using System;
namespace TypesOfVariables
{
    internal class Program
    {
        static int x = 100; // Static Variable
        int y = 200; // Non-Static or Instance Variable
        static void Main(string[] args)
        {
            Console.WriteLine($"x value: {x}"); // OK
            Console.WriteLine($"x value: {y}"); // Compile-time Error here!
            Console.Read();
        }
    }
}

ู„ู…ุง ุชุญุงูˆู„ ุชุดุบู„ ุงู„ู€ Code ุฏู‡ุŒ ู‡ูŠุฌูŠู„ูƒ Compile Time Error.

ุงู„ุณุจุจ ููŠ ูƒุฏู‡ ุฅู† ุงู„ู€ Memory ู„ู„ู€ Variable y ู…ุด ุจุชุชุนู…ู„ ุบูŠุฑ ู„ู…ุง ู†ุนู…ู„ instance ู…ู† ุงู„ู€ Class ุงู„ู„ูŠ ุงุณู…ู‡ุง ProgramุŒ ูˆู„ูƒู„ instance ุจู†ุนู…ู„ู‡. ู„ูƒู† ุงู„ู€ x ู…ุด ู…ุญุชุงุฌ instance ู…ู† ุงู„ู€ Class. ู„ูŠู‡ุŸ ู„ุฃู† ุงู„ู€ static variable ุจูŠุชู… ุชู‡ูŠุฆุชู‡ (initialized) ุฃูˆู„ ู…ุง ุงู„ู€ Class ุชุจุฏุฃ ุชุชู†ูุฐ.

ูŠุนู†ูŠ ู„ุญุฏ ู…ุง ู†ุนู…ู„ instance ู…ู† ุงู„ู€ Class ProgramุŒ ุงู„ู€ Memory ู…ุด ู‡ุชุชุฎุตุต ู„ู„ู€ Variable yุŒ ูˆุทูˆู„ ู…ุง ุงู„ู€ Memory ู…ุด ู…ุชุฎุตุตุฉ ู„ู€ yุŒ ู…ุด ู‡ู†ู‚ุฏุฑ ู†ูˆุตู„ู‡ุง. ูŠุจู‚ู‰ุŒ ุฃูˆู„ ู…ุง ู†ุนู…ู„ instance ู…ู† ุงู„ู€ Class ProgramุŒ ุงู„ู€ Memory ู„ู„ู€ Variable y ู‡ุชุชุฎุตุตุŒ ูˆุณุงุนุชู‡ุง ุจุณ ู‡ู†ู‚ุฏุฑ ู†ูˆุตู„ ู„ู„ู€ Variable y.

ููŠ ุงู„ู€ Example ุฏู‡ุŒ ู‡ู†ุนู…ู„ instance ู…ู† ุงู„ู€ Class ProgramุŒ ูˆู†ุณุชุฎุฏู… ุงู„ู€ instance ุฏู‡ ุนุดุงู† ู†ูˆุตู„ ู„ู„ู€ Variable y. ู„ูƒู† ุงู„ู€ x ู‡ู†ูˆุตู„ู‡ ู…ุจุงุดุฑุฉ.

using System;
namespace TypesOfVariables
{
    internal class Program
    {
        static int x = 100; // Static Variable
        int y = 200; // Non-Static or Instance Variable
        static void Main(string[] args)
        {
            Console.WriteLine($"x value: {x}"); // Access static directly
            Program obj = new Program(); // Create an instance of the Program class
            Console.WriteLine($"y value: {obj.y}"); // Access non-static using the instance
            Console.Read();
        }
    }
}

ุฏู„ูˆู‚ุชูŠ ู„ู…ุง ุชุดุบู„ ุงู„ู€ Code ุงู„ู„ูŠ ููˆู‚ ุฏู‡ุŒ ู‡ุชู„ุงู‚ูŠ ุจูŠุทุจุน ู‚ูŠู…ุฉ x ูˆ y ุงู„ุงุชู†ูŠู† ุนุงุฏูŠ:

Output:

x value: 100
y value: 200

ู…ุนู„ูˆู…ุฉ: ุฃูˆู„ ู†ู‚ุทุฉ ู…ุญุชุงุฌ ุชูุชูƒุฑู‡ุง ูˆุฃู†ุช ุจุชุดุชุบู„ ู…ุน ุงู„ู€ static ูˆุงู„ู€ non-static variablesุŒ ุฅู† ุงู„ู€ static members (variables, methods, etc.) ููŠ ุงู„ู€ Class ู…ุด ู…ุญุชุงุฌูŠู† instance ู…ู† ุงู„ู€ Class ุนุดุงู† ูŠุชู… ุชู‡ูŠุฆุชู‡ู… ูˆุชู†ููŠุฐู‡ู…. ููŠ ุงู„ู…ู‚ุงุจู„ุŒ ุงู„ู€ non-static members ููŠ ุงู„ู€ Class ู…ุญุชุงุฌูŠู† instance ู…ู† ุงู„ู€ Class ุนุดุงู† ูŠุชู… ุชู‡ูŠุฆุชู‡ู… ูˆุชู†ููŠุฐู‡ู….

When Static and Non-Static Variables are Initialized in C#?

ุงู„ู€ Static variables ููŠ ุงู„ู€ Class ุจูŠุชู… ุชู‡ูŠุฆุชู‡ุง ุฃูˆู„ ู…ุง ุงู„ู€ Class ุชุจุฏุฃ ุชุชู†ูุฐ. ุฃู…ุง ุงู„ู€ non-static variables ุฃูˆ ุงู„ู€ instance variables ุจูŠุชู… ุชู‡ูŠุฆุชู‡ุง ูู‚ุท ุจุนุฏ ุนู…ู„ instance ู…ู† ุงู„ู€ ClassุŒ ูˆููŠ ูƒู„ ู…ุฑุฉ ุจู†ุนู…ู„ ููŠู‡ุง instance ุฌุฏูŠุฏ ู…ู† ุงู„ู€ Class.

ุงู„ูุชุฑุฉ ู…ู† ุฃูˆู„ ู…ุง ู†ุจุฏุฃ ุชู†ููŠุฐ ุงู„ู€ Class ู„ุญุฏ ู…ุง ู†ุฎู„ุต ุชู†ููŠุฐู‡ ุจู†ุณู…ูŠู‡ุง ุงู„ู€ Life Cycle ุจุชุงุนุฉ ุงู„ู€ Class. ููŠ ุงู„ู€ Life Cycle ุฏูŠุŒ ุงู„ู€ static variables ุจูŠุชู… ุชู‡ูŠุฆุชู‡ุง ู…ุฑุฉ ูˆุงุญุฏุฉ ุจุณ. ุฃู…ุง ุงู„ู€ non-static ุฃูˆ ุงู„ู€ instance variables ุจูŠุชู… ุชู‡ูŠุฆุชู‡ุง 0 ู…ุฑุฉ ู„ูˆ ู…ุง ุนู…ู„ู†ุงุด ุฃูŠ instanceุŒ ูˆ N ู…ุฑุฉ ู„ูˆ ุนู…ู„ู†ุง N ู…ู† ุงู„ู€ instances.

ุชุนุงู„ ู†ูู‡ู… ุฏู‡ ุจู…ุซุงู„. ุจุต ุนู„ู‰ ุงู„ู€ Code ุฏู‡. ู‡ู†ุนู…ู„ ููŠู‡ instance ู…ู† ุงู„ู€ Class Program ู…ุฑุชูŠู†.

using System;
namespace TypesOfVariables
{
    internal class Program
    {
        static int x = 100; // Static Variable
        int y = 200; // Non-Static or Instance Variable
        static void Main(string[] args)
        {
            Console.WriteLine($"x value: {x}"); // x is 100
            Program obj1 = new Program(); // Create first instance
            Program obj2 = new Program(); // Create second instance
            Console.WriteLine($"obj1 y value: {obj1.y}"); // y for obj1 is 200
            Console.WriteLine($"obj2 y value: {obj2.y}"); // y for obj2 is 200
            Console.Read();
        }
    }
}

ููŠ ุงู„ู€ Example ุฏู‡ุŒ ุฃูˆู„ ู…ุง ุงู„ู€ Program execution startsุŒ ุงู„ู€ memory is allocated ู„ู„ู€ static variable x. ุจุนุฏ ูƒุฏู‡ ุนู…ู„ู†ุง instance ู…ู† ุงู„ู€ Class Program ู…ุฑุชูŠู†ุŒ ุฏู‡ ู…ุนู†ุงู‡ ุฅู† ุงู„ู€ memory ุงุชุฎุตุตุช ู„ู„ู€ Variable y ู…ุฑุชูŠู†. ู…ุฑุฉ ู„ู„ู€ instance obj1 ูˆู…ุฑุฉ ู„ู„ู€ instance obj2. ุนุดุงู† ุชูู‡ู… ุฃูƒุชุฑุŒ ุจุต ุนู„ู‰ ุงู„ู€ Diagram ุฏู‡ ุงู„ู„ูŠ ุจูŠู…ุซู„ ุงู„ู€ Memory architecture ู„ู„ู€ Example ุงู„ู„ูŠ ููˆู‚.

ุฒูŠ ู…ุง ุฃู†ุช ุดุงูŠู ููŠ ุงู„ู€ Diagram ุงู„ู„ูŠ ููˆู‚ุŒ ุงู„ู€ static variable x ู‡ูŠุชุนู…ู„ ู…ุฑุฉ ูˆุงุญุฏุฉ ุจุณุŒ ูˆุงู„ู€ non-static variable y ู‡ูŠุชุนู…ู„ ู…ุฑุชูŠู† ุนุดุงู† ุนู…ู„ู†ุง instance ู…ู† ุงู„ู€ Class Program ู…ุฑุชูŠู†.

Initializing Non-Static variables through Class Constructor in C#

ู„ู…ุง ุจู†ุนู…ู„ instance ู…ู† ุงู„ู€ ClassุŒ ุงู„ู€ constructor ุจูŠุชู… ุงุณุชุฏุนุงุคู‡ (called)ุŒ ูˆู…ู† ู‡ู†ุง ู†ู‚ุฏุฑ ู†ู‡ูŠุฆ (initialize) ุงู„ู€ instance variables ุฃูˆ ุงู„ู€ non-static variables ุนู† ุทุฑูŠู‚ ุงู„ู€ Class constructor.

ููŠ ุงู„ู€ Example ุงู„ู„ูŠ ูุงุชุŒ ุงู„ุงุชู†ูŠู† objects ูƒุงู† ุนู†ุฏู‡ู… ู†ูุณ ู‚ูŠู…ุฉ y ุงู„ู„ูŠ ู‡ูŠ 200. ุฏู„ูˆู‚ุชูŠุŒ ู„ูˆ ุนุงูŠุฒ ุชุฏูŠู„ู‡ ู‚ูŠู… ู…ุฎุชู„ูุฉุŒ ุชู‚ุฏุฑ ุชุนู…ู„ ุฏู‡ ุจุงุณุชุฎุฏุงู… ุงู„ู€ constructor. ุชุนุงู„ ู†ูู‡ู… ุฏู‡ ุจู…ุซุงู„. ููŠ ุงู„ู€ Example ุงู„ู„ูŠ ุชุญุชุŒ ุนู…ู„ู†ุง constructor ุจูŠุงุฎุฏ integer parameter ูˆุงุญุฏุŒ ูˆู‚ูŠู…ุฉ ุงู„ู€ parameter ุฏู‡ ุจู†ุณู†ุฏู‡ุง (assign) ู„ู„ู€ non-static variable y. ูˆุงุญู†ุง ุจู†ุนู…ู„ ุงู„ู€ instance ุฌูˆู‡ ุงู„ู€ Main methodุŒ ุจู†ู…ุฑุฑ ู‚ูŠู… ู…ุฎุชู„ูุฉ. ุฏู„ูˆู‚ุชูŠุŒ ุฃูŠ ู‚ูŠู…ุฉ ู‡ู†ู…ุฑุฑู‡ุงุŒ ู‡ูŠุชู… ุชุฎุฒูŠู†ู‡ุง ุฌูˆู‡ ุงู„ู€ non-static variable y.

using System;
namespace TypesOfVariables
{
    internal class Program
    {
        static int x = 100; // Static Variable
        int y = 200; // Non-Static or Instance Variable (Initial default)
        // Class Constructor
        public Program(int a) // Constructor takes an int parameter
        {
            y = a; // Initializing non-static variable y with the passed value
        }
        static void Main(string[] args)
        {
            Console.WriteLine($"x value: {x}"); // x is 100
            Program obj1 = new Program(300); // Create obj1, y is 300 for this instance
            Program obj2 = new Program(400); // Create obj2, y is 400 for this instance
            Console.WriteLine($"obj1 y value: {obj1.y}");
            Console.WriteLine($"obj2 y value: {obj2.y}");
            Console.Read();
        }
    }
}

Output:

x value: 100
obj1 y value: 300
obj2 y value: 400

ุฏู„ูˆู‚ุชูŠุŒ ููŠ ุงู„ู€ MemoryุŒ ู‚ูŠู…ุฉ y ู„ู„ู€ obj1 ู‡ุชุจู‚ู‰ 300ุŒ ูˆู„ู„ู€ obj2 ู‡ุชุจู‚ู‰ 400. ู„ูƒู† ู‚ูŠู…ุฉ ุงู„ู€ x ู‡ุชูุถู„ ุฒูŠ ู…ุง ู‡ูŠ 100. ุนุดุงู† ุชูู‡ู… ุฃูƒุชุฑุŒ ุจุต ุนู„ู‰ ุงู„ู€ Diagram ุฏู‡ ุงู„ู„ูŠ ุจุชูˆุถุญ ุงู„ู€ Memory representation.

ู…ู…ูƒู† ูŠุฌูŠู„ูƒ ุณุคุงู„ ุฏู„ูˆู‚ุชูŠุŒ ู‡ู„ ู†ู‚ุฏุฑ ู†ู‡ูŠุฆ ุงู„ู€ static variable ุนู† ุทุฑูŠู‚ ุงู„ู€ constructorุŸ ุงู„ุฅุฌุงุจุฉ ู‡ูŠ ุฃูŠูˆุฉ. ู†ู‚ุฏุฑ ู†ู‡ูŠุฆ ุงู„ู€ static variable ุนู† ุทุฑูŠู‚ ุงู„ู€ constructor. ุจุณ ูƒู„ ู…ุฑุฉ ุงู„ู€ constructor ูŠุชู†ูุฐ ููŠู‡ุงุŒ ู‚ูŠู…ุฉ ุงู„ู€ static variable ุงู„ู‚ุฏูŠู…ุฉ ู‡ูŠุชู… ุงุณุชุจุฏุงู„ู‡ุง ุจุงู„ู‚ูŠู…ุฉ ุงู„ุฌุฏูŠุฏุฉ. ุนุดุงู† ุชูู‡ู… ุฃูƒุชุฑุŒ ุจุต ุนู„ู‰ ุงู„ู€ Example ุฏู‡. ููŠ ุงู„ู€ Example ุงู„ู„ูŠ ุชุญุชุŒ ุจู†ู‡ูŠุฆ ุงู„ู€ static variable ุนู† ุทุฑูŠู‚ ุงู„ู€ Class constructor. ุฌุฒุก ู…ู† ุดุบู„ ุงู„ู€ constructor ุฅู†ู‡ ุจูŠู‡ูŠุฆ ุงู„ู€ Variables x ูˆ y ุจู‚ูŠู…ุฉ ุงู„ู€ parameter a.

using System;
namespace TypesOfVariables
{
    internal class Program
    {
        static int x = 100; // Static Variable
        int y = 200; // Non-Static or Instance Variable (Initial default)
        // Class Constructor
        public Program(int a) // Constructor takes an int parameter
        {
            y = a; // Initializing non-static variable
            x = a; // Initializing static variable - !!! This will overwrite x for *all* instances !!!
        }
        static void Main(string[] args)
        {
            Console.WriteLine($"x value: {x}"); // x = 100 initially
            Program obj1 = new Program(300); // Constructor sets x to 300
            Console.WriteLine($"obj1 y value: {obj1.y}"); // y = 300 for obj1
            Console.WriteLine($"x value: {x}"); // x is now 300
            Program obj2 = new Program(400); // Constructor sets x to 400
            Console.WriteLine($"obj2 y value: {obj2.y}"); // y = 400 for obj2
            Console.WriteLine($"x value: {x}"); // x is now 400
            Console.Read();
        }
    }
}

Output:

x value: 100
obj1 y value: 300
x value: 300
obj2 y value: 400
x value: 400

ุนุดุงู† ุชูู‡ู… ุฃูƒุชุฑุŒ ุจุต ุนู„ู‰ ุงู„ู€ Diagram ุฏู‡:

ูŠุจู‚ู‰ ุงู„ู†ู‚ุทุฉ ุงู„ู„ูŠ ู…ุญุชุงุฌ ุชูุชูƒุฑู‡ุง ู‡ูŠ ุฅู†ูƒ ู„ูˆ ุจุชุนู…ู„ ุชู‡ูŠุฆุฉ (initializing) ู„ู„ู€ static variable ุนู† ุทุฑูŠู‚ ุงู„ู€ constructorุŒ ููƒู„ ู…ุฑุฉ ุงู„ู€ constructor ูŠุชู†ูุฐ ููŠู‡ุงุŒ ุงู„ู‚ูŠู…ุฉ ุงู„ู…ูˆุฌูˆุฏุฉ ุญุงู„ูŠุงู‹ ููŠ ุงู„ู€ static variable ู‡ูŠุชู… ุงุณุชุจุฏุงู„ู‡ุง ุจุงู„ู‚ูŠู…ุฉ ุงู„ุฌุฏูŠุฏุฉ. ู„ุฐู„ูƒุŒ ุนู…ูˆู…ุงู‹ ู…ุด ุจู†ุนู…ู„ ุชู‡ูŠุฆุฉ ู„ู„ู€ static variables ุนู† ุทุฑูŠู‚ ุงู„ู€ constructor. ู„ูˆ ุนุงูŠุฒ ุชู‡ูŠุฆ Variable ุนู† ุทุฑูŠู‚ ุงู„ู€ constructorุŒ ุฎู„ูŠู‡ non-static.

Difference Between Static and Non-Static Variables in C#

  • ููŠ ุญุงู„ุฉ ุงู„ู€ Instance VariableุŒ ูƒู„ Object ู‡ูŠุจู‚ู‰ ู„ูŠู‡ ู†ุณุฎุชู‡ ุงู„ุฎุงุตุฉ ุจูŠู‡. ุฃู…ุง ุงู„ู€ Static variableุŒ ุจูŠุจู‚ู‰ ู„ูŠู‡ุง ู†ุณุฎุฉ ูˆุงุญุฏุฉ ุจุณ ู…ุดุชุฑูƒุฉ ุจูŠู† ูƒู„ ุงู„ู€ Objects ุจุบุถ ุงู„ู†ุธุฑ ุนู…ู„ุช ูƒุงู… Object.
  • ุงู„ุชุบูŠูŠุฑุงุช ุงู„ู„ูŠ ุจุชุนู…ู„ู‡ุง ููŠ ุงู„ู€ instance variable ุจุงุณุชุฎุฏุงู… Object ู…ุนูŠู† ู…ุด ู‡ุชุธู‡ุฑ ููŠ ุงู„ู€ Objects ุงู„ุชุงู†ูŠุฉุŒ ู„ุฃู† ูƒู„ Object ู„ูŠู‡ ู†ุณุฎุชู‡ ุงู„ุฎุงุตุฉ ู…ู† ุงู„ู€ instance variable. ุฃู…ุง ููŠ ุญุงู„ุฉ ุงู„ู€ static variablesุŒ ุฃูŠ ุชุบูŠูŠุฑ ุจูŠุญุตู„ ููŠ Object ู…ุนูŠู† ู‡ูŠุธู‡ุฑ ููŠ ูƒู„ ุงู„ู€ Objects ุงู„ุชุงู†ูŠุฉุŒ ู„ุฃู† ุงู„ู€ static variables ู…ุดุชุฑูƒุฉ ุจูŠู† ูƒู„ ุงู„ู€ Objects ุจุชุงุนุช ุงู„ู€ Class.
  • ุงู„ู€ instance variables ุจู†ู‚ุฏุฑ ู†ูˆุตู„ู‡ุง ุนู† ุทุฑูŠู‚ ุงู„ู€ object references (ูŠุนู†ูŠ ุงุณู… ุงู„ู€ object ูˆุงู„ู†ู‚ุทุฉ .). ุฃู…ุง ุงู„ู€ Static Variables ุจู†ู‚ุฏุฑ ู†ูˆุตู„ู‡ุง ู…ุจุงุดุฑุฉ ุจุงุณุชุฎุฏุงู… ุงุณู… ุงู„ู€ Class ููŠ C#.
  • ููŠ ุงู„ู€ Life Cycle ุจุชุงุนุช ุงู„ู€ ClassุŒ ุงู„ู€ static variable ุจูŠุชู… ุชู‡ูŠุฆุชู‡ ู…ุฑุฉ ูˆุงุญุฏุฉ ุจุณุŒ ุฃู…ุง ุงู„ู€ instance variables ุจูŠุชู… ุชู‡ูŠุฆุชู‡ุง 0 ู…ุฑุฉ ู„ูˆ ู…ุง ุนู…ู„ู†ุงุด ุฃูŠ instanceุŒ ูˆ n ู…ุฑุฉ ู„ูˆ ุนู…ู„ู†ุง n ู…ู† ุงู„ู€ instances.

Instance/Non-Static Variables in C# ุงู„ู€ Scope ุจุชุงุน ุงู„ู€ Instance Variable: ุจูŠุจู‚ู‰ ู…ูˆุฌูˆุฏ ููŠ ูƒู„ ุงู„ู€ Class ู…ุง ุนุฏุง ููŠ ุงู„ู€ static methods. ุงู„ู€ lifetime ุจุชุงุน ุงู„ู€ Instance Variable: ุจูŠูุถู„ ู…ูˆุฌูˆุฏ ู„ุญุฏ ู…ุง ุงู„ู€ Object ุงู„ู„ูŠ ู‡ูˆ ุฌุฒุก ู…ู†ู‡ ูŠูุถู„ ู…ูˆุฌูˆุฏ ููŠ ุงู„ู€ Memory.

Static Variables in C# ุงู„ู€ Scope ุจุชุงุน ุงู„ู€ Static Variable: ุจูŠุจู‚ู‰ ู…ูˆุฌูˆุฏ ููŠ ุงู„ู€ Class ูƒู„ู‡ุง. ุงู„ู€ Lifetime ุจุชุงุน ุงู„ู€ Static Variable: ุจูŠูุถู„ ู…ูˆุฌูˆุฏ ู„ุญุฏ ู…ุง ุงู„ุจุฑู†ุงู…ุฌ ูƒู„ู‡ ูŠุฎู„ุต ุชู†ููŠุฐู‡.

Constant Variables in C#

  • ู„ูˆ ู…ุด ุนุงูŠุฒ ุญุฏ (ุฃูˆ ุญุชู‰ ุฃู†ุช ู†ูุณูƒ) ูŠุบูŠุฑ ุงู„ู‚ูŠู…ุฉ ุงู„ู…ูˆุฌูˆุฏุฉ ููŠ VariableุŒ ู…ู…ูƒู† ุชุฒูˆุฏ ูƒู„ู…ุฉ const ู‚ุจู„ ู†ูˆุน ุงู„ู€ Variable.
const int myNum = 15; // Declare a constant integer variable
myNum = 20; // This will cause an error: Cannot assign to 'myNum' because it is a constant

Note: ู…ุด ู…ู…ูƒู† ุชุนุฑู Variable const ู…ู† ุบูŠุฑ ู…ุง ุชุฏูŠ ู„ู‡ ู‚ูŠู…ุฉ ููŠ ู†ูุณ ุงู„ูˆู‚ุช. ู„ูˆ ุนู…ู„ุช ูƒุฏู‡ุŒ ู‡ูŠุญุตู„ Error: A const field requires a value to be provided.

ููŠ C#ุŒ ู„ูˆ ุนุฑูู†ุง Variable ุจุงุณุชุฎุฏุงู… ุงู„ู€ keyword ุงู„ู„ูŠ ุงุณู…ู‡ constุŒ ูŠุจู‚ู‰ ุฏู‡ constant variable ูˆู‚ูŠู…ุฉ ุงู„ู€ constant variable ุฏูŠ ู…ุด ู…ู…ูƒู† ุชุชุนุฏู„ ุจุนุฏ ู…ุง ูŠุชู… ุชุนุฑูŠูู‡ุง. ุนุดุงู† ูƒุฏู‡ุŒ ู„ุงุฒู… ุฅุฌุจุงุฑูŠ ุชุนู…ู„ ุชู‡ูŠุฆุฉ (initialize) ู„ู„ู€ constant variable ูˆู‚ุช ุงู„ุชุนุฑูŠู ุจุชุงุนู‡. ู„ูˆ ุนุงูŠุฒ ุชุนุฑู ุงู„ู€ constant PI ููŠ ุจุฑู†ุงู…ุฌูƒุŒ ู…ู…ูƒู† ุชุนุฑูู‡ ูƒุงู„ุชุงู„ูŠ:

const float PI = 3.14f;

ู„ูˆ ู…ุง ุนู…ู„ุชุด ุชู‡ูŠุฆุฉ ู„ู„ู€ const variable ูˆู‚ุช ุงู„ุชุนุฑูŠู ุจุชุงุนู‡ุŒ ู‡ูŠุฌูŠู„ูƒ Compiler error.

Note: ุงู„ู€ constant variables ุจูŠุชู… ุนู…ู„ู‡ุง ู…ุฑุฉ ูˆุงุญุฏุฉ ุจุณ. ู„ูŠู‡ุŸ ู„ุฃู† ู‚ูŠู…ุชู‡ุง ู…ุด ู…ู…ูƒู† ุชุชุบูŠุฑ ุจุนุฏ ุชุนุฑูŠูู‡ุงุŒ ูู„ูˆ ุณู…ุญู†ุง ู†ุนู…ู„ ู†ุณุฎ ูƒุชูŠุฑ ู…ู† ุงู„ู€ constant variableุŒ ูƒู„ ุงู„ู†ุณุฎ ุฏูŠ ู‡ุชุฎุฒู† ู†ูุณ ุงู„ู‚ูŠู…ุฉ ูˆุฏู‡ ูŠุนุชุจุฑ ุงุณุชู‡ู„ุงูƒ ู„ู„ู€ Memory ุนู„ู‰ ุงู„ูุงุถูŠ. ูู„ู…ุง ุชูƒูˆู† ุงู„ู‚ูŠู…ุฉ ู…ุด ู‡ุชุชุบูŠุฑุŒ ุนู…ู„ ู†ุณุฎ ูƒุชูŠุฑ ู‡ูˆ ุงุณุชู‡ู„ุงูƒ ู„ู„ู…ูˆุงุฑุฏ ุนู„ู‰ ุงู„ูุงุถูŠ.

ุณู„ูˆูƒ ุงู„ู€ constant variable ุดุจู‡ ุณู„ูˆูƒ ุงู„ู€ static variablesุŒ ูŠุนู†ูŠ ุจูŠุชู… ุชู‡ูŠุฆุชู‡ุง ู…ุฑุฉ ูˆุงุญุฏุฉ ุจุณ ููŠ ุงู„ู€ Life Cycle ุจุชุงุนุช ุงู„ู€ ClassุŒ ูˆู…ุด ุจุชุญุชุงุฌ instance ู…ู† ุงู„ู€ Class ู„ุง ู„ู„ุชู‡ูŠุฆุฉ ูˆู„ุง ู„ู„ุชู†ููŠุฐ. ุนุดุงู† ุชูู‡ู… ุฃูƒุชุฑุŒ ุจุต ุนู„ู‰ ุงู„ู€ Example ุฏู‡.

using System;
namespace TypesOfVariables
{
    internal class Program
    {
        const float PI = 3.14f; // Constant Variable
        static int x = 100; // Static Variable
        //We are going to initialize variable y through constructor
        int y; // Non-Static or Instance Variable
        //Constructor
        public Program(int a)
        {
            //Initializing non-static variable
            y = a;
        }
        static void Main(string[] args)
        {
            //Accessing the static variable without instance
            Console.WriteLine($"x value: {x}"); // x is 100
            //Accessing the constant variable without instance
            Console.WriteLine($"PI value: {PI}"); // PI is 3.14
            Program obj1 = new Program(300); // Create obj1, y=300
            Program obj2 = new Program(400); // Create obj2, y=400
            //Accessing Non-Static variable using instance
            Console.WriteLine($"obj1 y value: {obj1.y}");
            Console.WriteLine($"obj2 y value: {obj2.y}");
            Console.Read();
        }
    }
}

Output:

x value: 100
PI value: 3.14
obj1 y value: 300
obj2 y value: 400

ุงู„ู€ Diagram ุงู„ู„ูŠ ุฌุงูŠ ุจูŠูˆุถุญ ุงู„ู€ Memory representation ู„ู„ู€ Example ุงู„ู„ูŠ ููˆู‚.

ู…ู…ูƒู† ูŠุฌูŠู„ูƒ ุณุคุงู„ ุฏู„ูˆู‚ุชูŠุŒ ู„ูˆ ุงู„ุงุชู†ูŠู† (static ูˆ constant) ุจูŠุชุตุฑููˆุง ุจู†ูุณ ุงู„ุทุฑูŠู‚ุฉุŒ ุฅูŠู‡ ุงู„ูุฑู‚ ุจูŠู†ู‡ู…ุŸ

Difference Between Static and Constant Variable in C#

ุงู„ูุฑู‚ ุงู„ูˆุญูŠุฏ ุจูŠู† ุงู„ู€ static ูˆุงู„ู€ constant variable ู‡ูˆ ุฅู† ุงู„ู€ static variables ู…ู…ูƒู† ุชุชุนุฏู„ ุจุนุฏ ุชู‡ูŠุฆุชู‡ุงุŒ ุฃู…ุง ุงู„ู€ constant variables ููŠ C# ู…ุด ู…ู…ูƒู† ุชุชุนุฏู„ ุฎุงู„ุต ุจุนุฏ ู…ุง ูŠุชู… ุชุนุฑูŠูู‡ุง (ูˆุชู‡ูŠุฆุชู‡ุง). ุชุนุงู„ ู†ุซุจุช ุฏู‡. ููŠ ุงู„ู€ Example ุงู„ู„ูŠ ุชุญุชุŒ ุฌูˆู‡ ุงู„ู€ Main methodุŒ ุจู†ุญุงูˆู„ ู†ุนุฏู„ ู‚ูŠู…ุฉ ุงู„ู€ static x ูˆุงู„ู€ constant PI.

using System;
namespace TypesOfVariables
{
    internal class Program
    {
        const float PI = 3.14f; // Constant Variable
        static int x = 100; // Static Variable
        int y; // Non-Static or Instance Variable
        //Constructor
        public Program(int a)
        {
            //Initializing non-static variable
            y = a;
        }
        static void Main(string[] args)
        {
            Console.WriteLine($"x value: {x}");
            Console.WriteLine($"PI value: {PI}");
 
            x = 700; // Modifying Static Variable - Allowed
            // PI = 3.15f; // Trying to Modify the Constant Variable - Compile Error!
 
            Console.WriteLine($"x value after modification: {x}"); // x is now 700
 
            Program obj1 = new Program(300);
            Program obj2 = new Program(400);
 
            Console.WriteLine($"obj1 y value: {obj1.y}");
            Console.WriteLine($"obj2 y value: {obj2.y}");
            Console.Read();
        }
    }
}

ู„ู…ุง ุชุญุงูˆู„ ุชุดุบู„ ุงู„ู€ Code ุงู„ู„ูŠ ููˆู‚ ุฏู‡ุŒ ู‡ูŠุฌูŠู„ูƒ Compilation Error.

ุงู„ู€ Error ุฏู‡ ุจูŠู‚ูˆู„ ุตุฑุงุญุฉู‹ ุฅู† ุงู„ู€ left-hand side ุจุชุงุน ุงู„ู€ assignment ู„ุงุฒู… ูŠูƒูˆู† Variable, property ุฃูˆ indexer. ู„ูƒู† ู‡ู†ุง ู‡ูˆ constantุŒ ูˆุจุงู„ุชุงู„ูŠ ุจูŠุฌูŠู„ู†ุง compilation error.

Read-Only Variables in C#

ู„ู…ุง ุจู†ุนุฑู Variable ุจุงุณุชุฎุฏุงู… ุงู„ู€ keyword ุงู„ู„ูŠ ุงุณู…ู‡ readonlyุŒ ุจูŠุจู‚ู‰ ุงุณู…ู‡ read-only variable. ุงู„ู€ Variables ุฏูŠ ู…ุด ู…ู…ูƒู† ุชุชุนุฏู„ ุฒูŠ ุงู„ู€ constants ุฅู„ุง ุจุนุฏ ุงู„ุชู‡ูŠุฆุฉ. ุฏู‡ ู…ุนู†ุงู‡ ุฅู†ู‡ ู…ุด ุฅุฌุจุงุฑูŠ ุชุนู…ู„ ุชู‡ูŠุฆุฉ (initialize) ู„ู„ู€ read-only variable ูˆู‚ุช ุชุนุฑูŠูู‡ุŒ ู…ู…ูƒู† ูƒู…ุงู† ูŠุชู… ุชู‡ูŠุฆุชู‡ ุฌูˆู‡ ุงู„ู€ constructor. ูŠุนู†ูŠ ู†ู‚ุฏุฑ ู†ุนุฏู„ ู‚ูŠู…ุฉ ุงู„ู€ read-only variable ูู‚ุท ุฌูˆู‡ ุงู„ู€ constructor.

ุณู„ูˆูƒ ุงู„ู€ read-only variables ุจูŠุจู‚ู‰ ุดุจู‡ ุณู„ูˆูƒ ุงู„ู€ non-static variables ููŠ C#ุŒ ูŠุนู†ูŠ ุจูŠุชู… ุชู‡ูŠุฆุชู‡ุง ุจุณ ุจุนุฏ ู…ุง ู†ุนู…ู„ instance ู…ู† ุงู„ู€ ClassุŒ ูˆู…ุฑุฉ ูˆุงุญุฏุฉ ู„ูƒู„ instance ุจูŠุชุนู…ู„. ุฏู‡ ู…ุนู†ุงู‡ ุฅู†ู†ุง ู…ู…ูƒู† ู†ุนุชุจุฑู‡ุง non-static variableุŒ ูˆุนุดุงู† ู†ูˆุตู„ ู„ู„ู€ readonly variables ู…ุญุชุงุฌูŠู† instance.

Example to Understand Read-Only Variables in C#

ููŠ ุงู„ู€ Example ุงู„ู„ูŠ ุชุญุชุŒ ุงู„ู€ read-only variable z ู…ุด ู…ุชุณู†ุฏู„ู‡ุง ุฃูŠ ู‚ูŠู…ุฉ ูˆู‚ุช ุงู„ุชุนุฑูŠูุŒ ู„ูƒู† ู„ู…ุง ู†ุทุจุน ู‚ูŠู…ุชู‡ุงุŒ ุงู„ู€ default value ุจุชุงุนุช ุงู„ู€ int ุงู„ู„ูŠ ู‡ูŠ 0 ู‡ูŠุชู… ุนุฑุถู‡ุง.

using System;
namespace TypesOfVariables
{
    internal class Program
    {
        const float PI = 3.14f; // Constant Variable
        static int x = 100; // Static Variable
        //We are going to initialize variable y through constructor
        int y; // Non-Static or Instance Variable
        readonly int z; // Readonly Variable - not initialized here
 
        //Constructor
        public Program(int a)
        {
            y = a;
            // z is not initialized here, will take default value (0 for int)
        }
        static void Main(string[] args)
        {
            Console.WriteLine($"x value: {x}");
            Console.WriteLine($"PI value: {PI}");
 
            Program obj1 = new Program(300); // Create obj1, y=300
            Program obj2 = new Program(400); // Create obj2, y=400
 
            // Accessing Non-Static and Readonly variables using instance
            Console.WriteLine($"obj1 y value: {obj1.y} and Readonly z value: {obj1.z}"); // z will be 0
            Console.WriteLine($"obj2 y value: {obj2.y} and Readonly z value: {obj2.z}"); // z will be 0
            Console.Read();
        }
    }
}

Output:

x value: 100
PI value: 3.14
obj1 y value: 300 and Readonly z value: 0
obj2 y value: 400 and Readonly z value: 0

ููŠ ุงู„ู€ Example ุงู„ู„ูŠ ุฌุงูŠุŒ ุจู†ู‡ูŠุฆ ุงู„ู€ readonly variable ุนู† ุทุฑูŠู‚ ุงู„ู€ Class constructor. ุงู„ู€ constructor ุฏู‡ ู‡ูŠุงุฎุฏ ุงุชู†ูŠู† parameters. ุงู„ู€ parameter ุงู„ุฃูˆู„ ู‡ูŠู‡ูŠุฆ ุงู„ู€ non-static variableุŒ ูˆุงู„ู€ parameter ุงู„ุชุงู†ูŠ ู‡ูŠู‡ูŠุฆ ุงู„ู€ readonly variable. ูŠุจู‚ู‰ุŒ ูˆู‚ุช ุนู…ู„ ุงู„ู€ instanceุŒ ู…ุญุชุงุฌูŠู† ู†ู…ุฑุฑ ู‚ูŠู…ุชูŠู† integer ู„ู„ู€ constructor function.

using System;
namespace TypesOfVariables
{
    internal class Program
    {
        const float PI = 3.14f; // Constant Variable
        static int x = 100; // Static Variable
        //We are going to initialize variable y through constructor
        int y; // Non-Static or Instance Variable
        readonly int z; // Readonly Variable
 
        //Constructor takes two parameters
        public Program(int a, int b)
        {
            //Initializing non-static variable
            y = a;
            //Initializing Readonly variable using constructor
            z = b;
        }
        static void Main(string[] args)
        {
            Console.WriteLine($"x value: {x}");
            Console.WriteLine($"PI value: {PI}");
 
            Program obj1 = new Program(300, 45); // Create obj1, y=300, z=45
            Program obj2 = new Program(400, 55); // Create obj2, y=400, z=55
 
            // Accessing Non-Static and Readonly variables using instance
            Console.WriteLine($"obj1 y value: {obj1.y} and Readonly z value: {obj1.z}");
            Console.WriteLine($"obj2 y value: {obj2.y} and Readonly z value: {obj2.z}");
            Console.Read();
        }
    }
}

Output:

x value: 100
PI value: 3.14
obj1 y value: 300 and Readonly z value: 45
obj2 y value: 400 and Readonly z value: 55

ุนุดุงู† ุชูู‡ู… ุฃูƒุชุฑ ุงู„ู€ Example ุงู„ู„ูŠ ููˆู‚ุŒ ุจุต ุนู„ู‰ ุงู„ู€ Diagram ุฏู‡ ุงู„ู„ูŠ ุจูŠูˆุถุญ ุงู„ู€ Memory representation.

graph LR
    A[Program Class] --> B(Static Variable x: 100);
    A --> C(Constant Variable PI: 3.14);
    A --> D[Instance 1: obj1];
    D --> E(Non-Static Variable y: 300);
    D --> F(Readonly Variable z: 45);
    A --> G[Instance 2: obj2];
    G --> H(Non-Static Variable y: 400);
    G --> I(Readonly Variable z: 55);

ุฏู„ูˆู‚ุชูŠ ู…ู…ูƒู† ูŠุฌูŠู„ูƒ ุณุคุงู„ ุชุงู†ูŠุŒ ู„ูˆ ุงู„ู€ non-static ูˆุงู„ู€ readonly ุงู„ุงุชู†ูŠู† ุจูŠุชุตุฑููˆุง ุจู†ูุณ ุงู„ุทุฑูŠู‚ุฉุŒ ุฅูŠู‡ ุงู„ูุฑู‚ ุจูŠู†ู‡ู…ุŸ

Difference Between Non-Static and Readonly in C#

ุงู„ูุฑู‚ ุงู„ูˆุญูŠุฏ ุจูŠู† ุงู„ู€ non-static ูˆุงู„ู€ readonly variable ู‡ูˆ ุฅู†ู‡ ุจุนุฏ ุงู„ุชู‡ูŠุฆุฉุŒ ุชู‚ุฏุฑ ุชุนุฏู„ ู‚ูŠู…ุฉ ุงู„ู€ non-static variableุŒ ู„ูƒู† ู…ุด ู…ู…ูƒู† ุชุนุฏู„ ู‚ูŠู…ุฉ ุงู„ู€ readonly variable. ุชุนุงู„ ู†ุซุจุช ุฏู‡. ููŠ ุงู„ู€ Example ุงู„ู„ูŠ ุชุญุชุŒ ุจุนุฏ ู…ุง ุนู…ู„ู†ุง ุงู„ู€ instance ุงู„ุฃูˆู„ุงู†ูŠุŒ ุจู†ุญุงูˆู„ ู†ุนุฏู„ ู‚ูŠู…ุฉ ุงู„ู€ non-static y ูˆุงู„ู€ readonly z.

using System;
namespace TypesOfVariables
{
    internal class Program
    {
        const float PI = 3.14f; // Constant Variable
        static int x = 100; // Static Variable
        //We are going to initialize variable y through constructor
        int y; // Non-Static or Instance Variable
        readonly int z; // Readonly Variable
 
        //Constructor takes two parameters
        public Program(int a, int b)
        {
            //Initializing non-static variable
            y = a;
            //Initializing Readonly variable
            z = b;
        }
        static void Main(string[] args)
        {
            Console.WriteLine($"x value: {x}");
            Console.WriteLine($"PI value: {PI}");
 
            Program obj1 = new Program(300, 45); // Create obj1, y=300, z=45
 
            // Accessing Non-Static and Readonly variables using instance
            Console.WriteLine($"obj1 y value: {obj1.y} and Readonly z value: {obj1.z}");
 
            obj1.y = 500; // Modifying Non-Static Variable - Allowed
            // obj1.z = 400; // Trying to Modify Readonly Variable - Compile Error!
 
            Console.WriteLine($"obj1 y value after modification: {obj1.y}"); // y is now 500
 
            Console.Read();
        }
    }
}

ู„ู…ุง ุชุญุงูˆู„ ุชุดุบู„ ุงู„ู€ Code ุงู„ู„ูŠ ููˆู‚ ุฏู‡ุŒ ู‡ูŠุฌูŠู„ูƒ Compilation Error.

ุงู„ู€ Error ุฏู‡ ุจูŠู‚ูˆู„ ุตุฑุงุญุฉู‹ ุฅู† ุงู„ู€ readonly field ู…ุด ู…ู…ูƒู† ูŠุชู… ุฅุณู†ุงุฏ ู‚ูŠู…ุฉ ู„ูŠู‡ (ู…ุง ุนุฏุง ููŠ ุงู„ู€ constructor ุฃูˆ ุงู„ู€ init-only setter ุจุชุงุน ุงู„ู€ Type ุงู„ู„ูŠ ุงู„ู€ field ู…ุชุนุฑู ููŠู‡ ุฃูˆ ููŠ ุงู„ู€ variable initializer). ุฏู‡ ู…ุนู†ุงู‡ ุฅู†ูƒ ุชู‚ุฏุฑ ุชุนู…ู„ ุชู‡ูŠุฆุฉ ู„ู„ู€ readonly variable ุจุณ ูˆู‚ุช ุชุนุฑูŠูู‡ ุฃูˆ ุนู† ุทุฑูŠู‚ ุงู„ู€ constructor. ูˆู‡ู†ุงุŒ ุจู†ุญุงูˆู„ ู†ุนุฏู„ ู‚ูŠู…ุฉ ุงู„ู€ readonly ุฌูˆู‡ ุงู„ู€ Main method ูˆุฏู‡ ุณุจุจ ุงู„ู€ compilation error.

What is the difference between a constant and readonly variable in C#?

ุงู„ูุฑู‚ ุจูŠู† ุงู„ู€ constant ูˆุงู„ู€ readonly variable ููŠ C# ู‡ูˆ ุฅู† ุงู„ู€ constant ู‡ูŠ ู‚ูŠู…ุฉ ุซุงุจุชุฉ ู„ูƒู„ ุงู„ู€ Class ูƒู„ู‡ุง (ู…ุด ู…ุฑุชุจุทุฉ ุจู€ instance ู…ุนูŠู†)ุŒ ุฃู…ุง ุงู„ู€ readonly ู‡ูŠ ู‚ูŠู…ุฉ ุซุงุจุชุฉ ุฎุงุตุฉ ุจู€ instance ู…ุนูŠู† ู…ู† ุงู„ู€ ClassุŒ ูˆู„ูƒู„ instance ุจูŠุชู… ุนู…ู„ู‡.

Local Variables in C#

ุงู„ู€ Local Variables ููŠ C# ุจุชุชุนุฑู ุฌูˆู‡ ุงู„ู€ Method ุจุชุงุนุช ุงู„ู€ Class. ุงู„ู€ Scope ุจุชุงุน ุงู„ู€ local variable ู…ุญุฏูˆุฏ ุจุงู„ู€ Method ุงู„ู„ูŠ ุงุชุนุฑูุช ุฌูˆุงู‡ุŒ ุฏู‡ ู…ุนู†ุงู‡ ุฅู†ูƒ ู…ุด ู…ู…ูƒู† ุชูˆุตู„ู‡ุง ู…ู† ุจุฑู‡ ุงู„ู€ Method ุฏูŠ. ุชู‡ูŠุฆุฉ (initialization) ุงู„ู€ local variable ุฅุฌุจุงุฑูŠ.

Scope ุจุชุงุน ุงู„ู€ Local Variables: ุจูŠุจู‚ู‰ ู…ูˆุฌูˆุฏ ุฌูˆู‡ ุงู„ู€ block (ุงู„ู‚ูˆุณูŠู† {}) ุงู„ู„ูŠ ุงุชุนุฑู ููŠู‡ ุจุณ. The lifetime ุจุชุงุน ุงู„ู€ Local Variable: ุจูŠูุถู„ ู…ูˆุฌูˆุฏ ู„ุญุฏ ู…ุง ุงู„ู€ control ุจุชุงุน ุงู„ุจุฑู†ุงู…ุฌ ูŠุฎุฑุฌ ู…ู† ุงู„ู€ block ุงู„ู„ูŠ ุงุชุนุฑู ููŠู‡.

Example to Understand Local Variables in C#

using System;
namespace TypesOfVariables
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // This is a static block (static method)
            int y = 100; // Local Variable 'y'. By default static because in static block.
                         // Scope limited to Main method.
            Console.WriteLine(y); // Can access y here
            Console.Read();
        }
        public void NonStaticBlock()
        {
            // This is a non-static block (non-static method)
            int x = 100; // Local Variable 'x'. By default non-static.
                         // Scope limited to NonStaticBlock method only.
            Console.WriteLine(x); // Can access x here
        }
         // Cannot access x or y here, they are out of scope
    }
}

Special Variable Types

ุจุงู„ุฅุถุงูุฉ ู„ู„ุฃู†ูˆุงุน ุงู„ุฃุณุงุณูŠุฉ ุงู„ู„ูŠ ุงุชูƒู„ู…ู†ุง ุนู†ู‡ุง (Static, Non-Static, Const, Readonly, Local)ุŒ ููŠู‡ ุฃู†ูˆุงุน ุชุงู†ูŠุฉ ุจุชุณุชุฎุฏู… ููŠ C# ู„ูŠู‡ุง ุณู„ูˆูƒ ู…ุฎุชู„ู ูˆู‡ูŠ var, object, ูˆ dynamic.

var (Implicit Typed Variable)

  • ุฅุฒุงูŠ ุดุบุงู„ู‡ุŸ ุจุชุฏูŠู‡ุง ู‚ูŠู…ุฉ ุฃูˆู„ูŠุฉุŒ ูˆุงู„ู€ Compiler ู‡ูˆ ุงู„ู„ูŠ ูŠุญุฏุฏ ู†ูˆุนู‡ุง ุฃูˆุชูˆู…ุงุชูŠูƒ ู…ู† ุงู„ู‚ูŠู…ุฉ ุฏูŠ. ุฃู†ุช ู…ุด ุจุชุญุฏุฏู‡. ู…ุซุงู„: var x = 10; โ†’ ุงู„ู€ Type ู‡ู†ุง ุจู‚ู‰ int. var y = "Hello"; โ†’ ุงู„ู€ Type ู‡ู†ุง ุจู‚ู‰ string.

  • Rules:

    • ู…ุด ู…ู…ูƒู† ุชุนู„ู†ู‡ุง ู…ู† ุบูŠุฑ ู…ุง ุชุฏูŠู„ู‡ุง ู‚ูŠู…ุฉ ุฃูˆู„ูŠุฉ. โš ๏ธ var x; โ†’ ุบู„ุท!
    • ู…ุด ู…ู…ูƒู† ุชุฏูŠู„ู‡ุง null ููŠ ุงู„ุจุฏุงูŠุฉ. โš ๏ธ var z = null; โ†’ ุบู„ุท!
    • ุงู„ู€ Type ุจูŠุชุญุฏุฏ ู…ุฑุฉ ูˆุงุญุฏุฉ ููŠ (Compile Time) ูˆู…ุชู‚ุฏุฑุด ุชุบูŠุฑู‡ ุจุนุฏ ูƒุฏู‡. ู…ุซุงู„:
    var x = 5; // x is implicitly typed as int
    x = "Ahmed"; // Error: Cannot implicitly convert type 'string' to 'int'
  • ู„ุงุฒู… ุชุณุชุฎุฏู…ู‡ุง ููŠู†ุŸ

    • ู„ูˆ ุงู„ู€ Type ุงุณู…ู‡ ุทูˆูŠู„ (ู…ุซู„ุงู‹ ููŠ ุงู„ู€ LINQ ุฃูˆ ู…ุน Lambda Expressions in Csharp).
    • ู„ู…ุง ุชูƒูˆู† ุนุงูŠุฒ ุชูƒูˆุฏ ุฃุณุฑุน ู…ู† ุบูŠุฑ ู…ุง ุชูƒุชุจ ู†ูˆุน ุงู„ู…ุชุบูŠุฑ ูƒู„ู‡.
  • ู…ู„ุญูˆุธุฉ:

    • ุงู„ู€ var ู…ุด ู†ูˆุน ุฌุฏูŠุฏ! ุฏู‡ ู…ุฌุฑุฏ ุงุฎุชุตุงุฑ ุจูŠุณู‡ู„ ุงู„ูƒุชุงุจุฉ.
    • ุงู„ู€ Variable ุจูŠุจู‚ุง ู„ู‡ ู†ูˆุน ุซุงุจุช (Strongly Typed) ู…ู† ุฃูˆู„ ู…ุง ูŠุชุญุฏุฏ ููŠ ุงู„ู€ Compile Time.
    • ุงุณุชุฎุฏุงู…ู‡ ู…ู…ูƒู† ูŠุจู‚ุง ุจุณูŠุท ุฃูˆูŠ ุจุณ ุจุฑุถูˆ ู…ู…ูƒู† ูŠุฃุซุฑ ุนู„ู‰ ู‚ุฑุงุกุฉ ุงู„ู€ Code ู„ูˆ ู…ุด ูˆุงุถุญ ุงู„ู†ูˆุน.

object

ุงุชูƒู„ู…ู†ุง ุนู†ู‡ ุจุงู„ุชูุตูŠู„ ููŠ ุงู„ู€ Object

  • ุฅุฒุงูŠ ุดุบุงู„ู‡ุŸ ุงู„ู€ object ู‡ูˆ ุงู„ู€ base type ุฃูˆ ุฃุจูˆ ูƒู„ ุงู„ู€ Types ููŠ C#. ุฃูŠ ุญุงุฌุฉ ุชู‚ุฏุฑ ุชุญุทู‡ุง ููŠู‡ (ู„ุฃู† ูƒู„ ุงู„ู€ Types ู…ุจู†ูŠุฉ ุนู„ูŠู‡ ุฃูˆ ุจุชูˆุฑุซ ู…ู†ู‡).

    • ู…ู„ุญูˆุธุฉ ู…ู‡ู…ุฉ: ู„ูˆ ุญุทูŠุช ููŠู‡ ู‚ูŠู…ุฉ ู…ู† ู†ูˆุน ุจุณูŠุท (value type) ุฒูŠ ุงู„ู€ int ุฃูˆ ุงู„ู€ doubleุŒ ุงู„ู€ Compiler ู‡ูŠุญูˆู„ู‡ุง ู„ู€ reference type (ุงู„ุนู…ู„ูŠุฉ ุฏูŠ ุงุณู…ู‡ุง Boxing). ู…ุซุงู„:
    object x = 5; // ู‡ู†ุง ุงู„ู€5 (ุงู„ู‚ูŠู…ุฉ) ุงุชุญูˆู„ุช ู„ู€ object ูˆุงุชุฎุฒู†ุช ููŠ ุงู„ู€ Heap
  • ุนูŠูˆุจู‡:

    • ู„ูˆ ุนุงูŠุฒ ุชุณุชุฎุฏู… ุงู„ู‚ูŠู…ุฉ ุงู„ู„ูŠ ุฌูˆุงู‡ุŒ ู„ุงุฒู… ุชุญูˆู„ู‡ุง ู„ู€ ู†ูˆุนู‡ุง ุงู„ุฃุตู„ูŠ (ุงู„ุนู…ู„ูŠุฉ ุฏูŠ ุงุณู…ู‡ุง Unboxing). ู…ุซุงู„:
      int y = (int)x; // Casting back to int (Unboxing)
    • ู„ูˆ ุนู…ู„ุช Casting ู„ู†ูˆุน ุบู„ุท โ‡’ ู‡ูŠุญุตู„ ุบู„ุท ููŠ ุงู„ุฑู† ุชุงูŠู… (Runtime Error).
    • ุฃุจุทุฃ ููŠ ุงู„ุฃุฏุงุก ุจุณุจุจ ุนู…ู„ูŠุงุช ุงู„ู€ Boxing ูˆุงู„ู€ Casting.
  • ู…ู…ูŠุฒุงุชู‡:

    • ู…ุฑู† ุฌุฏุงู‹. ุชู‚ุฏุฑ ุชุฎุฒู† ุฃูŠ ุญุงุฌุฉ ููŠู‡.

dynamic

  • ุฅุฒุงูŠ ุดุบุงู„ู‡ุŸ ุงู„ู€ dynamic ุฏู‡ ู†ูˆุน ุงู„ู€ Type ุจุชุงุนู‡ ุจูŠุชุญุฏุฏ ููŠ ุงู„ุฑู† ุชุงูŠู… (Run Time). ุงู„ู€ Compiler ู…ุด ุจูŠูุญุตู‡ ุฃุซู†ุงุก ูƒุชุงุจุฉ ุงู„ู€ Code. ู…ุซุงู„:

    dynamic x = 10; // Type is dynamic, not checked at compile time
    x = "Ahmed"; // Type can change at runtime, no problem
  • ู…ู…ูŠุฒุงุชู‡:

    • ุณู‡ู„ ู…ุน ุงู„ุญุงุฌุงุช ุงู„ุฏูŠู†ุงู…ูŠูƒูŠุฉ (ู…ุซู„ ุงู„ู€ COM Interop ุฃูˆ ุงู„ู€ APIs ุงู„ุฎุงุฑุฌูŠุฉ ุงู„ู„ูŠ ุจุชุฑุฌุน ุฃู†ูˆุงุน ู…ุด ู…ุนุฑูˆูุฉ ู…ุณุจู‚ุงู‹).
    • ู…ุด ู…ุญุชุงุฌ ุชุนู…ู„ Casting ุจู†ูุณูƒ.
  • ุนูŠูˆุจู‡:

    • ู…ุด ุขู…ู† (Not Type Safe): ุฃูŠ ุบู„ุท ููŠ ุงู„ู€ Type ู‡ุชูƒุชุดูู‡ ูู‚ุท ู„ู…ุง ุงู„ุจุฑู†ุงู…ุฌ ูŠุดุชุบู„.
    • ุฃู‚ู„ ุฃุฏุงุกู‹ ู„ุฅู† ุงู„ุชุญู‚ู‚ ู…ู† ุงู„ู€ Type ุจูŠุญุตู„ ููŠ ุงู„ู€ Run Time ุจุฏู„ ุงู„ู€ Compile Time.

ุงู„ูุฑูˆู‚ุงุช ุงู„ุฃุณุงุณูŠุฉ ุจูŠู†ู‡ู… (var, object, dynamic)

Featurevarobjectdynamic
ูˆู‚ุช ุชุญุฏูŠุฏ ุงู„ู†ูˆุน(Compiler) Compile TimeCompile Time (ู„ูƒู† ู…ุน Boxing)(CLR) Run Time
Type Safetyุขู…ู† (ุงู„ูƒูˆู…ุจุงูŠู„ุฑ ุจูŠุดูŠูƒ)ุบูŠุฑ ุขู…ู† (ู…ุญุชุงุฌ Casting)ุบูŠุฑ ุขู…ู† (ุบู„ุท ููŠ ุงู„ุฑู† ุชุงูŠู…)
ุงู„ุฃุฏุงุกุณุฑูŠุน (ุนุงุฏูŠ ุฒูŠ ุฃูŠ ู†ูˆุน)ุจุทูŠุก (ุจุณุจุจ Boxing/Unboxing)ู…ุชูˆุณุท (ู„ุฃู†ู‡ ุฏูŠู†ุงู…ูŠูƒูŠ)
ุงู„ู…ุฑูˆู†ุฉู…ุญุฏูˆุฏ (ุงู„ู†ูˆุน ุจูŠุชุญุฏุฏ ู…ุฑุฉ ูˆุงุญุฏุฉ)ุนุงู„ูŠ (ุชู‚ุฏุฑ ุชุฎุฒู† ุฃูŠ ุญุงุฌุฉ)ุนุงู„ูŠ ุฌุฏุงู‹ (ุงู„ุชุบูŠูŠุฑ ููŠ ุงู„ุฑู† ุชุงูŠู…)

ุฃู…ุซู„ุฉ ุนู…ู„ูŠุฉ ุนู„ู‰ var, object, dynamic

// var
var name = "Mohamed"; // name is implicitly typed as string
var age = 25; // age is implicitly typed as int
 
// object
object obj1 = 10; // Boxing happening here (int 10 is boxed into an object)
object obj2 = "Test"; // string "Test" is treated as an object
int num = (int)obj1; // Unboxing (object is cast back to int)
 
// dynamic
dynamic dyn = 10; // Type is dynamic
dyn = "Text"; // Type can change at runtime, no problem
dyn = dyn.ToUpper(); // If dyn is not a string at this point, this will be a runtime error

Conclusion

ูƒุฏู‡ ุดุฑุญู†ุง ุงู„ู€ Variables ููŠ C# ุจุฃู†ูˆุงุนู‡ุง ุงู„ู…ุฎุชู„ูุฉ ูˆุฅู…ุชู‰ ุชุณุชุฎุฏู… ูƒู„ ู†ูˆุน. ู…ู† ุฃูˆู„ ุงู„ุฃู†ูˆุงุน ุงู„ุฃุณุงุณูŠุฉ ุฒูŠ ุงู„ู€ Static ูˆุงู„ู€ Non-Static ูˆุงู„ู€ Const ูˆุงู„ู€ Readonly ูˆุงู„ู€ Local VariablesุŒ ู„ุญุฏ ุงู„ุฃู†ูˆุงุน ุงู„ุฎุงุตุฉ ุฒูŠ var, object, ูˆ dynamic.