Methods, Parameters & Return Types

লেসন ৪ / ৫০

Method Basics

// Signature: access modifier, return type, name, params
public int Add(int a, int b) {
    return a + b;
}

// Expression-bodied (C# 6+)
public int Multiply(int a, int b) => a * b;

// void — কিছু return করে না
public void PrintHello(string name) {
    Console.WriteLine($"Hello {name}");
}

Parameter Types

// 1. Pass by value (default)
void Increment(int x) { x++; }    // caller affect না

// 2. ref — reference, must initialize
void DoubleIt(ref int x) { x *= 2; }
int n = 5;
DoubleIt(ref n);    // n = 10

// 3. out — reference, output only
void GetValues(out int a, out string b) {
    a = 100;
    b = "Hello";
}
GetValues(out int x, out string s);

// 4. params — variable args
int Sum(params int[] nums) {
    return nums.Sum();
}
Sum(1, 2, 3, 4, 5);

// 5. Optional & Named
void Greet(string name, string greeting = "Hello") {
    Console.WriteLine($"{greeting}, {name}");
}
Greet("Rahim");
Greet("Karim", greeting: "Hi");

Method Overloading

public int Add(int a, int b) => a + b;
public double Add(double a, double b) => a + b;
public string Add(string a, string b) => a + b;
// Same name, different signatures

Static vs Instance

class Calculator {
    public static int Add(int a, int b) => a + b;     // class-level
    public int Counter { get; set; }                    // instance
    public void Increment() => Counter++;
}

int sum = Calculator.Add(2, 3);     // class দিয়ে
var calc = new Calculator();
calc.Increment();                    // object দিয়ে

Local Function (C# 7+)

public int Process(int n) {
    int Square(int x) => x * x;     // method এর ভিতরে
    return Square(n) + 1;
}