Создайте метод, применимый к объекту String - PullRequest
2 голосов
/ 26 сентября 2011

Я хотел бы создать метод, применимый к String объекту, который будет возвращать измененный String:

String s = "blabla";
String result = s.MyNewMethod();

Я попытался создать новый класс String, но ключевое слово this кажется неизвестным:

class String  {

    public String MyNewMethod() {
        String s = this.Replace(',', '.'); // Replace method is unknown here
        // ...
    }
}

Ответы [ 2 ]

8 голосов
/ 26 сентября 2011

Вам необходимо определить метод расширения :

public static class StringExtensions {
    public static string MyNewMethod(this string s) {
        // do something and return a string
    }
}

Обратите внимание, что методы расширения static и определены в static классе верхнего уровня.

1 голос
/ 26 сентября 2011

Я думаю, это требует немного большего объяснения.

  1. String - это запечатанный класс в .NET, как и в большинстве OO-типов безопасных языков. Это означает, что вы не можете подкласс строки. Вот отличная информация о строках: http://www.yoda.arachsys.com/csharp/strings.html. И почему они не могут быть разделены на подклассы.

  2. Чтобы создать подкласс в .net, вы должны использовать следующий синтаксис:

    // here "Test is a subclass of Test2"
    public class Test : Test2 {
    
    }
    
  3. Методы расширения, упомянутые Джейсоном, отлично подходят для добавления функциональности в запечатанные классы. Методы расширения никогда не могут переопределять функцию, которая уже существует в классе. Во время компиляции они имеют более низкий приоритет, чем методы экземпляра. Поскольку методы расширения не живут в классе, они не могут получить доступ к внутренним и закрытым полям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...