Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Created October 7, 2025 06:43
Show Gist options
  • Save sunmeat/75d1693cb6e23e7979c8701b116718c1 to your computer and use it in GitHub Desktop.
Save sunmeat/75d1693cb6e23e7979c8701b116718c1 to your computer and use it in GitHub Desktop.
extension methods C#
using System.Text;
/*
методи розширення в c# дозволяють додавати нові методи до наявних типів
без зміни їхнього визначення
це досягається за допомогою статичного методу, який приймає об'єкт, до якого застосовується
розширення, як перший параметр
методи розширення в c# мають бути статичними, бо вони, хоч і викликаються через екземпляр об'єкта,
але синтаксично належать статичному класу
це означає, що вони не мають доступу до стану конкретного об'єкта,
оскільки не пов'язані з конкретним екземпляром класу, до якого застосовуються
замість цього вони приймають об'єкт як перший параметр і працюють з ним,
але сам метод лишається статичним
для створення методу розширення для типу даних виконайте такі кроки:
1. створіть статичний клас, у якому буде визначено метод розширення
2. визначте статичний метод у цьому класі з ключовим словом this,
вказавши тип даних, до якого хочете додати метод
*/
static class Extensions
{
// метод розширення для сортування символів у рядку
public static string Sort(this string s)
{
// перетворення рядка на масив символів для сортування
char[] charArray = s.ToCharArray();
Array.Sort(charArray);
return new string(charArray);
}
// метод розширення для видалення пробілів
public static string RemoveSpaces(this string s)
{
Console.WriteLine("привіт з мого методу розширення!");
return s.Replace(" ", "");
}
// метод розширення для тестового виведення
public static void EEEEERockMethod(this string s)
{
Console.WriteLine("єєєєєєєєєє рок!");
}
}
class Program
{
static void Main()
{
Console.OutputEncoding = Encoding.UTF8;
string name = " Олександр ";
// сортування символів у рядку
name = name.Sort();
// насправді це буде виклик ось такий:
// name = Extensions.Sort(name);
// як компілятор шукає потрібний метод?
// він виконує пошук за суворими правилами, щоб уникнути неоднозначностей.
// спочатку шукає метод Sort безпосередньо в string(або його базових класах / інтерфейсах). якщо знайде — використовує його
// якщо не знайшов, переходить до extension-методів. шукає в статичних класах (тільки статичні класи, позначені static class, можуть містити extension-методи),
// в методах з ключовим словом this - перший параметр має бути this T тип, де T — тип об'єкта (тут this string s для string),
// видалення пробілів
name = name.RemoveSpaces();
Console.WriteLine(name);
// тестовий метод розширення
name.EEEEERockMethod();
// додатковий приклад: комбінування методів
string testString = "Привіт, Київ!";
string sortedAndClean = testString.Sort().RemoveSpaces();
Console.WriteLine($"посортований та очищений: {sortedAndClean}");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment