Рубрики
Без рубрики

C# для разработчика Java: Методы расширения

Потратив несколько лет на разработку кода Java, я недавно решил вернуться к C# и поделиться wh… С пометкой java, новички, csharp.

Потратив несколько лет на разработку кода Java, я недавно решил вернуться к C# и поделиться тем, что я узнал в процессе. В этом посте в блоге я расскажу о методах расширений. Эта концепция, которая существует в некоторых языках JVM (например, Kotlin ), но не в Java, позволяет разработчику добавлять методы в класс, не касаясь его кода (отсюда и название расширение методы).

Допустим, вы хотите создать метод, который помещает первую букву строки в верхний регистр и возвращает новую строку. Вы не можете изменить (или даже наследовать) класс String в Java, чтобы добавить этот метод. Поскольку вы не обязательно хотите создавать свой собственный вариант класса String для своей кодовой базы, вы, вероятно, создадите статическую функцию, которая принимает Строку в качестве аргумента и возвращать другую Строка :

class StringExtensions {
  static String capitalize(String word) {
      return Character.toUpperCase(word.charAt(0)) + word.substring(1);
  }
}

Теперь вы можете просто вызвать эту функцию следующим образом:

String word = "hello";
String capitalizedWord = StringExtensions.capitalize(word);

Конечно, создание статического метода также возможно в C#. Однако в C# есть функция, которая позволяет добавлять новые методы в класс без необходимости изменять его код. Эта функция называется методы расширения . Чтобы создать метод расширения, вам необходимо создать статический класс верхнего уровня и реализовать статический метод. Первый аргумент этого метода указывает тип, с которым работает метод, и должен иметь модификатор this :

static class StringExtensions
{
  static string Capitalize(this String word)
  {
      // Note that this cannot access any private data in the String class. 
      return char.ToUpper(word[0]) + word.Substring(1);
  }
}

Чтобы использовать его, пространство имен, содержащее класс, должно быть указано с помощью директивы using . После этого метод может быть вызван так, как если бы он был методом экземпляра типа:

string word = "hello";
string capitalizedWord = word.Capitalize();

Методы расширения очень эффективны. Помимо того факта, что код выглядит “чище”, также можно легко подключать новые модели поведения к существующим типам, просто импортируя пространство имен. Код расширения может находиться в отдельных специальных модулях, которые можно импортировать только при необходимости.

Оригинал: “https://dev.to/rnowif/c-for-the-java-developer-extension-methods-n69”