В C# есть два способа добавить метод к библиотечному классу без наследования: с помощью extension-методов и с помощью применения декоратора.
Расширение класса с помощью extension-методов позволяет добавить новый метод в уже существующий класс, не изменяя сам класс. Для создания extension-метода необходимо создать статический класс, содержащий статический метод с ключевым словом "this" в качестве первого параметра. Этот параметр обозначает, к какому типу данных будет применяться extension-метод.
Пример:
public static class StringExtensions { public static string Reverse(this string str) { char[] charArray = str.ToCharArray(); Array.Reverse(charArray); return new string(charArray); } }
В данном примере мы расширяем класс string и добавляем метод Reverse, который позволяет перевернуть строку.
Для использования extension-метода необходимо импортировать пространство имен, содержащее статический класс, и вызвать extension-метод, как если бы он был частью класса, к которому он был добавлен.
using StringExtensions; string testString = "Hello World!"; string reversedString = testString.Reverse(); Console.WriteLine(reversedString); // Output: "!dlroW olleH"
Методы можно добавить к библиотечному классу с помощью применения декоратора Extension. Декоратор Extension позволяет добавлять новые методы к существующим классам без необходимости изменять исходный код класса. Для применения декоратора Extension необходимо создать статический класс с статическим методом и пометить его атрибутом Extension. Первый параметр метода должен представлять тип, к которому метод будет применяться. Обратите внимание, что в данном случае сам класс не изменяется, и метод вызывается таким же образом, как обычный статический метод.
Пример:
public static class StringExtensions { [Extension] public static string Reverse(string str) { char[] charArray = str.ToCharArray(); Array.Reverse(charArray); return new string(charArray); } }
Для использования метода, добавленного с использованием декоратора Extension, необходимо импортировать пространство имен, содержащее статический класс, и вызвать метод, как обычный статический метод.
using StringExtensions; string testString = "Hello World!"; string reversedString = StringExtensions.Reverse(testString); Console.WriteLine(reversedString); // Output: "!dlroW olleH"
В обоих случаях мы добавляем новый метод к существующему классу без изменения исходного кода класса. Это позволяет удобно расширять функциональность библиотечных классов и повышать их гибкость.