Created
October 7, 2025 06:43
-
-
Save sunmeat/75d1693cb6e23e7979c8701b116718c1 to your computer and use it in GitHub Desktop.
extension methods C#
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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