Functions and Methods in C# 🚀
Functions (or methods) in C# encapsulate logic and allow code reuse. They take input parameters, process logic, and return results.
1️⃣ Defining and Calling Methods
A method in C# consists of:
Access modifier Return type Method name Parameters (optional) Method body
🔹 Basic Method
Syntax:
[AccessModifier] ReturnType MethodName(ParameterList)
{
// Method body
return value; // (if applicable)
}
Example:
class Program
{
static void SayHello() // No parameters, no return type
{
Console.WriteLine("Hello, World!");
}
static void Main()
{
SayHello(); // Method call
}
}
2️⃣ Methods with Parameters
🔹 Passing Arguments
Parameters allow input values to be passed to a method.
static void Greet(string name)
{
Console.WriteLine($"Hello, {name}!");
}
static void Main()
{
Greet("Alice"); // Output: Hello, Alice!
}
3️⃣ Methods with Return Values
🔹 Returning a Value
Methods can return values instead of void.
static int Add(int a, int b)
{
return a + b;
}
static void Main()
{
int result = Add(5, 3);
Console.WriteLine(result); // Output: 8
}
4️⃣ Method Overloading
Method overloading allows multiple methods with the same name but different parameters.
static int Multiply(int a, int b) => a * b;
static double Multiply(double a, double b) => a * b;
static void Main()
{
Console.WriteLine(Multiply(2, 3)); // Calls int version → Output: 6
Console.WriteLine(Multiply(2.5, 3.5)); // Calls double version → Output: 8.75
}
5️⃣ Optional and Named Parameters
🔹 Optional Parameters
C# allows setting default values for parameters.
static void PrintMessage(string message = "Default message")
{
Console.WriteLine(message);
}
static void Main()
{
PrintMessage(); // Output: Default message
PrintMessage("Hello, C#!"); // Output: Hello, C#!
}
🔹 Named Parameters
Named parameters allow explicitly specifying parameter names.
static void DisplayUserInfo(string name, int age)
{
Console.WriteLine($"{name} is {age} years old.");
}
static void Main()
{
DisplayUserInfo(age: 25, name: "Bob"); // Order does not matter
}
6️⃣ Pass by Value vs Pass by Reference
🔹 Pass by Value (Default)
Changes inside the method do not affect the original variable.
static void Square(int num)
{
num *= num;
Console.WriteLine($"Inside method: {num}"); // Modified locally
}
static void Main()
{
int number = 5;
Square(number);
Console.WriteLine($"Outside method: {number}"); // Original remains unchanged
}
🔹 Pass by Reference (ref and out)
Using ref (Requires Initialization)
The original variable is modified inside the method.
static void DoubleValue(ref int num)
{
num *= 2;
}
static void Main()
{
int value = 10;
DoubleValue(ref value);
Console.WriteLine(value); // Output: 20
}
Using out (No Need for Initialization)
The variable must be assigned inside the method.
static void GetValues(out int x, out int y)
{
x = 5;
y = 10;
}
static void Main()
{
GetValues(out int a, out int b);
Console.WriteLine($"{a}, {b}"); // Output: 5, 10
}
7️⃣ Local Functions (C# 7+)
Methods inside other methods for encapsulation.
static void Main()
{
void LocalFunction()
{
Console.WriteLine("Inside Local Function");
}
LocalFunction(); // Call local function
}
8️⃣ Expression-Bodied Methods (C# 6+)
A shorter syntax for simple methods.
static int Square(int n) => n * n;
static void Print() => Console.WriteLine("Hello, C#!");
9️⃣ Recursive Methods
Methods calling themselves to solve problems recursively.
Example: Factorial Calculation
static int Factorial(int n)
{
if (n == 1) return 1;
return n * Factorial(n - 1);
}
static void Main()
{
Console.WriteLine(Factorial(5)); // Output: 120
}
🔚 Summary
- Methods allow reusability and better code organization
- Parameters can be required, optional, or named
- Return values provide results
- Method overloading allows flexibility
- Pass by reference (
ref,out) modifies original values - Local and recursive functions improve modularity
Comments
Post a Comment