In C#, extension methods allow you to "add" methods to existing types without modifying the original type or using inheritance. These methods are defined in a static class, and the method itself must also be static, with the first parameter preceded by the this
keyword to indicate the type it's extending.
🔹 Syntax of Extension Method
csharp
public static class ExtensionClass
{
public static returnType MethodName(this TypeToExtend obj, other parameters)
{
// method body
}
}
🔹 Example 1: Extension Method on string
Type
csharp
// Extension class
public static class StringExtensions
{
public static int WordCount(this string str)
{
if (string.IsNullOrWhiteSpace(str)) return 0;
return str.Split(' ').Length;
}
}
// Usage
class Program
{
static void Main()
{
string msg = "Hello from TechForest Software";
int count = msg.WordCount(); // Using extension method
Console.WriteLine("Word Count: " + count);
}
}
🔹 Example 2: Extension Method on Custom Class
csharp
public class Employee
{
public string Name { get; set; }
public double Salary { get; set; }
}
// Extension class
public static class EmployeeExtensions
{
public static void DisplayInfo(this Employee emp)
{
Console.WriteLine($"Name: {emp.Name}, Salary: {emp.Salary}");
}
public static bool IsHighEarner(this Employee emp, double threshold)
{
return emp.Salary > threshold;
}
}
// Usage
class Program
{
static void Main()
{
Employee e = new Employee { Name = "Shiva", Salary = 85000 };
e.DisplayInfo(); // Extension method
bool isHigh = e.IsHighEarner(80000);
Console.WriteLine("Is High Earner: " + isHigh);
}
}
🔍 Reflection in C# — Explained Simply
Reflection in C# is a powerful feature that allows you to inspect metadata about assemblies, types, and members (like properties, methods, fields) at runtime. It belongs to the System.Reflection
namespace.
✅ Use Cases of Reflection
-
Get type information at runtime
-
Inspect methods, properties, and fields
-
Create instances of types dynamically
-
Invoke methods dynamically
-
Used in serialization, unit testing frameworks, dependency injection, etc.
📦 Required Namespace
csharp
using System;
using System.Reflection;
🔹 Simple Example: Inspecting a Class Using Reflection
csharp
using System;
using System.Reflection;
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public void Display()
{
Console.WriteLine($"Id: {Id}, Name: {Name}");
}
}
class Program
{
static void Main()
{
// Get type info using typeof
Type type = typeof(Student);
Console.WriteLine("Class Name: " + type.Name);
Console.WriteLine("\n--- Properties ---");
foreach (PropertyInfo prop in type.GetProperties())
{
Console.WriteLine("Property: " + prop.Name);
}
Console.WriteLine("\n--- Methods ---");
foreach (MethodInfo method in type.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly))
{
Console.WriteLine("Method: " + method.Name);
}
}
}
🧩 Partial Class in C# – Simple Explanation with Example
A partial class in C# allows you to split the definition of a class into multiple files. When the application compiles, all the parts are combined into a single class.
✅ Why Use Partial Classes?
-
Helpful when working on large classes.
-
Supports code separation (e.g., designer code in one file, logic in another).
-
Allows multiple developers to work on the same class simultaneously.
-
Used heavily in WinForms, ASP.NET Web Forms, and Entity Framework.
🧪 Syntax
File 1: Student1.cs
csharp
public partial class Student
{
public int Id { get; set; }
}
File 2: Student2.cs
csharppublic partial class Student
{
public string Name { get; set; }
public void Display()
{
Console.WriteLine($"ID: {Id}, Name: {Name}");
}
}
File 3: Program.cs
csharp
using System;
class Program
{
static void Main()
{
Student s = new Student();
s.Id = 101;
s.Name = "Shiva";
s.Display(); // Output: ID: 101, Name: Shiva
}
}
📘 Key Rules
-
All parts must use the partial
keyword.
-
All parts must be in the same namespace and same assembly.
-
Access modifiers (like public
) must be consistent.
POST Answer of Questions and ASK to Doubt