6 / 4 / 3
Регистрация: 23.10.2010
Сообщений: 289
|
||||||
1 | ||||||
Разъясните, пожалуйста, как работает this19.08.2019, 22:52. Показов 855. Ответов 15
Метки нет (Все метки)
Здравствуйте!
Есть небольшой примерчик программы которая подсчитывает количество определенных символов
0
|
19.08.2019, 22:52 | |
Ответы с готовыми решениями:
15
Первая программа на C#. Разъясните кое-что , пожалуйста Паттерн MVC. Разъясните для чайника на пальцах пожалуйста Разъясните пожалуйста как работает эта часть кода разъясните,пожалуйста, как это сделать? |
6 / 4 / 3
Регистрация: 23.10.2010
Сообщений: 289
|
|
19.08.2019, 23:01 [ТС] | 2 |
0
|
1514 / 905 / 328
Регистрация: 17.05.2015
Сообщений: 3,417
|
|
19.08.2019, 23:04 | 3 |
WersaT, да код не так прочитал сначала.
Я не уверен, но возможно это интернирование строк. https://habr.com/ru/post/172627/ Добавлено через 1 минуту Возможно эти строки, состоящие из одних и тех же символов, ссылаются на одни и те же символы в памяти
0
|
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
|
|
19.08.2019, 23:05 | 4 |
1
|
6 / 4 / 3
Регистрация: 23.10.2010
Сообщений: 289
|
|
19.08.2019, 23:06 [ТС] | 5 |
А как определять какую строку метод с this будет использовать?
0
|
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
|
|
19.08.2019, 23:08 | 6 |
Ну на какой переменной вызвали, ту и будет использовать.
У вас написано: Метод вызывается с переменной s , вот она и используется.Если поменяете на int i = s1.WordCount(c); , то получите ожидаемое 6.
0
|
6 / 4 / 3
Регистрация: 23.10.2010
Сообщений: 289
|
|
19.08.2019, 23:10 [ТС] | 7 |
kolorotur, спасибо.
Блин, на s не обратил внимания, больше не буду по ночам читать литературу сложнее сказки))) Еще раз спасибо
0
|
Модератор
|
|
19.08.2019, 23:17 | 8 |
public static int WordCount(this string str, char c) - это метод расширения. См. https://metanit.com/sharp/tutorial/3.18.php , https://docs.microsoft.com/ru-... on-methods
0
|
5 / 18 / 6
Регистрация: 15.10.2017
Сообщений: 161
|
||||||
20.08.2019, 23:25 | 9 | |||||
Это указатель на что-то текущего обьекта.
Ну вот смотрите:
0
|
5 / 18 / 6
Регистрация: 15.10.2017
Сообщений: 161
|
||||||
20.08.2019, 23:47 | 11 | |||||
Я и вник в тему, и написал пример с this потому что как говорит уважаемый koloroturint i = s.WordCount(c);
передать this и вот мой отрывок из примера:
0
|
5 / 18 / 6
Регистрация: 15.10.2017
Сообщений: 161
|
||||||
21.08.2019, 00:07 | 13 | |||||
Элд Хасп, нечего особенного , вот ответ
Взял с quaru Это синтаксис для объявления методов расширения, новая функция С# 3.0. Метод расширения - это код части, компилятор части "магия", где компилятор с помощью intellisense в Visual Studio показывает, что ваш метод расширения фактически доступен как метод экземпляра для рассматриваемого объекта. Позвольте мне привести пример. В классе String, который называется GobbleGobble, нет метода, поэтому создайте метод расширения:
После объявления вышеуказанного метода вы можете в Visual Studio ввести следующее: String s = "Turkey Baster!"; s. после точки, дождитесь intellisense и обратите внимание, что там есть метод GobbleGobble, выполните следующий код: String s = "Turkey Baster!"; s.GobbleGobble(); Важно. Класс, в котором объявлен метод расширения, должен быть доступен компилятору и процессору intellisense для того, чтобы intellisense отображал этот метод. Если вы вручную вводите GobbleGobble и используете ярлык Ctrl + ., это не поможет вам получить правильное использование директив в файле. Обратите внимание, что параметр метода исчез. Компилятор будет молча перемещаться по важным битам, которые: String s = "Turkey Baster!"; s.GobbleGobble(); ^ ^ | +-- the compiler will find this in the StringExtensions class | +-- will be used as the first parameter to the method Таким образом, приведенный выше код будет преобразован компилятором в следующее: String s = "Turkey Baster!"; StringExtensions.GobbleGobble(s); Итак, во время вызова нет ничего волшебного в этом, это просто вызов статического метода. Обратите внимание, что если ваш метод расширения объявляет более одного параметра, только первый поддерживает модификатор this, а остальные должны быть указаны как часть вызова метода как обычно: public static void GobbleGobble(this string value, string extra) { | | ... | | } | | | | +--------------------------------------------+ | | | v | s.GobbleGobble("extra goes here"); | ^ | | | +-----------------------------------+ Методы расширения были добавлены частично из-за Linq, где синтаксис Linq С# будет искать подходящие именованные методы расширения для объектов в игре, что означает, что вы можете "внедрить" Linq-поддержку в любой тип класса, просто объявив правильные методы расширения. Конечно, полная поддержка Linq - это большая работа, но это возможно. Кроме того, сами методы расширения действительно полезны, поэтому читайте на нем.
0
|
3560 / 2501 / 1174
Регистрация: 14.08.2016
Сообщений: 8,206
|
|
21.08.2019, 00:15 | 14 |
Terabiterr, ни разу не встречал, даже упоминания о существовании, не статических имен методов
0
|
5 / 18 / 6
Регистрация: 15.10.2017
Сообщений: 161
|
|
21.08.2019, 00:39 | 16 |
Элд Хасп, извиняюсь не заметил что вы уже две ссылки показывали за this в аргумент
1
|
21.08.2019, 00:39 | |
21.08.2019, 00:39 | |
Помогаю со студенческими работами здесь
16
Разъясните пожалуйста как хранятся символы в видео памяти Ребят, разъясните, пожалуйста, как сделать код, позволяющий заполнить одномерный массив Разъясните пожалуйста Разъясните пожалуйста Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |