Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
906
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Как я могу создать прототипные методы (например, JavaScript) в C#.Net?
Как можно сделать прототипные методы в C#.Net?
В JavaScript я могу сделать следующее, чтобы создать метод обрезки для объекта string:
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g,"");
}
Как я могу сделать это в C#.Net?
Вы не можете динамически добавлять методы к существующим объектам или классам в .NET, за исключением изменения источника для этого класса.
Однако в C# 3.0 можно использовать методы расширения, которые выглядят как новые методы, но являются магией времени компиляции.
Чтобы сделать это для вашего кода:
public static class StringExtensions
{
public static String trim(this String s)
{
return s.Trim();
}
}
Использовать его:
String s = " Test ";
s = s.trim();
Это выглядит как новый метод, но будет компилироваться точно так же, как этот код:
String s = " Test ";
s = StringExtensions.trim(s);
Чего именно вы пытаетесь достичь? Может быть, есть лучшие способы сделать то, что вы хотите?
Похоже, вы говорите о методах расширения C#'s. Вы добавляете функциональность существующим классам, вставляя ключевое слово "this" перед первым параметром. Метод должен быть статическим методом в статическом классе. Строки в .NET уже имеют метод "Trim", поэтому я использую другой пример.
public static class MyStringEtensions
{
public static bool ContainsMabster(this string s)
{
return s.Contains("Mabster");
}
}
Так что теперь каждая строка имеет чрезвычайно полезный метод ContainsMabster, который я могу использовать следующим образом:
if ("Why hello there, Mabster!".ContainsMabster()) { /* ... */ }
Обратите внимание, что вы также можете добавить методы расширения к интерфейсам (например, IList), что означает, что любой класс, реализующий этот интерфейс, также получит этот новый метод.
Любые дополнительные параметры, объявленные в методе расширения (после первого параметра "this"), рассматриваются как обычные параметры.
Используя компилятор 3.5, вы можете использовать метод расширения:
public static void Trim(this string s)
{
// implementation
}
Вы можете использовать это в целевом проекте CLR 2.0 (компилятор 3.5), включив этот хак:
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly)]
public sealed class ExtensionAttribute : Attribute
{
}
}