2013-08-22 4 views
2

Расширение основных классов в javascript - это легко. У меня создается впечатление, что на C# это не так-то просто. Я хотел бы добавить некоторые вещи к классу струнных, так что я мог сделать такие вещи, как:Как расширить класс String?

string s = "the cat's mat sat"; 
string sql = s.smartsingleQuote(); 

, таким образом, давая мне

the cat''s mat sat 

Это даже возможно, или я должен написать функцию что?

ответ

3

Да, вы можете сделать это, с extension method. Это будет выглядеть примерно так:

public static class NameDoesNotMatter { 
    public static string smartSingleQuote(this string s) { 
     string result = s.Replace("'","''"); 
     return result; 
    } 
} 

Магия - это ключевое слово «это» перед первым аргументом. Тогда вы можете написать свой код, и он будет работать:

string s = "the cat's mat sat"; 
string sql = s.smartsingleQuote(); 
12

Да, это возможно с помощью методов расширения - MSDN

Вот пример кода.

public static class Extns 
{ 
    public static string smartsingleQuote(this string s) 
    { 
     return s.Replace("'","''"); 
    } 
} 

Предупреждение: Не проверено.

3

Вы не можете сделать то, что вы говорите, как string class is sealed

Вы можете выполнить эстетику этого путем создания extension method

public static class StringExtensions 
{ 
    public static string SmartSingleQuote(this string str) 
    { 
    //Do stuff here 
    } 
} 

В this ключевое слово в параметре позволяет считать, что параметр и поставьте его перед именем метода для упрощения цепочки, как вы просили сделать в своем вопросе. Это, однако, эквивалентно:

StringExtensions.SmartSingleQuote(s); 

Это зависит только от ваших предпочтений в тот момент :)

Here is a good SO answer on extension methods

+0

Если вы используете метод расширения, вы можете напрямую вызвать s.SmartSingleQuote() правильно? Если вы используете StringExtensions.SmartSingleQuote (s), вам не нужен метод расширения? – Anuraj

+0

@ Анурай, да, я не повторил, что, поскольку это было частью вопроса ОП, на который уже был дан ответ. Я пытался дать более глубокое понимание методов расширения, чтобы понять, что это эквивалентно –

Смежные вопросы