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;
}