Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2015, 18:23   #1
hoz
Форумчанин
 
Аватар для hoz
 
Регистрация: 29.06.2013
Сообщений: 132
По умолчанию Вариант использования this

Я как-то уже привык к использованию this с целью присвоения значений переменным, имеющим одинаковые названия с вводными параметрами метода, например:
Код:
public void GetInformation(string name)
(
 this.name = name;
}
В подобных ситуациях всё просто. Но попался подобный код:
Код:
class Person
{
  public string SSN {get; set;}
  // Вернуть хеш-код на основе уникальных строковых данных.
  public override int GetHashCode()
  {
     return this.ToString().GetHashCode();
  }
}
Какую роль в данном случае выполняет this ?

From Stilet: Прошу выделять код, не относящийся к PHP спецкнопкой # а не <>

Последний раз редактировалось Stilet; 16.02.2015 в 18:57.
hoz вне форума Ответить с цитированием
Старый 16.02.2015, 18:28   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Никакую, видимо автор любит this или посчитал что так нагляднее.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 16.02.2015 в 18:34.
Alex11223 вне форума Ответить с цитированием
Старый 16.02.2015, 19:39   #3
hoz
Форумчанин
 
Аватар для hoz
 
Регистрация: 29.06.2013
Сообщений: 132
По умолчанию

Пошёл я на msdn и там увидел различные варианты использования this.
Например, вот:
Код:
CalcTax(this);
Там сказано, что подобная конструкция используется:
" Для передачи другим методам объекта в качестве параметра "
В каком случае данный приём сработает? Я не совсем понял.
hoz вне форума Ответить с цитированием
Старый 16.02.2015, 19:44   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Когда CalcTax(this); вызывается из метода некоего класса, this передает ссылку на объект этого класса, в методе которого прошел вызов.
И вообще this указывает на сам объект, которому принадлежит метод, в котором он используется.
Например:
Код:
class Person
{
  public string SSN {get; set;}
  // Вернуть хеш-код на основе уникальных строковых данных.
  public override int GetHashCode()
  {
     return CalcTax(<>);
  }
}
...
Person Pers;
Что по твоему нужно писать в <> чтоб передать в CalcTax() переменку Pers?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.02.2015, 20:04   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

this - есть такой же объект, как и тот, с которым работаете через описанные собой любимым переменные. Сработает этот приём там же, где срабатывает и с другими объектами. Воспринимайте this не как что-то волшебное и чудесное, а как локальную константу, ссылающуюся на текущий объект и жизнь станет проще и солнце будет ярче светить.
pu4koff вне форума Ответить с цитированием
Старый 16.02.2015, 20:35   #6
hoz
Форумчанин
 
Аватар для hoz
 
Регистрация: 29.06.2013
Сообщений: 132
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Когда CalcTax(this); вызывается из метода некоего класса, this передает ссылку на объект этого класса, в методе которого прошел вызов.
И вообще this указывает на сам объект, которому принадлежит метод, в котором он используется.
Например:
Код:
class Person
{
  public string SSN {get; set;}
  // Вернуть хеш-код на основе уникальных строковых данных.
  public override int GetHashCode()
  {
     return CalcTax(<>);
  }
}
...
Person Pers;
Что по твоему нужно писать в <> чтоб передать в CalcTax() переменку Pers?
This. Теперь я понимаю. Выходит, что потому переменной текущего класса с именем переменной передаваемой через параметры и можно присвоить новое имя через this.имя переменной текущего объекта т.к. это и есть ссылка на объект.имя переменной(метода) текущего объекта. А там получается возвращается не такая конструкция, а сам this. А это означает что возвращается не член класса(объекта) а сам объект. Я правильно понял?
hoz вне форума Ответить с цитированием
Старый 16.02.2015, 20:47   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Что? Какое новое имя?оО

Можно сказать, что когда вы пишете
Код:
class A
{
    private string name;

    void something()
    {
         name = "...";
         ToString();
     }
}
то компилятор "догадывается", что вы "забыли" this перед name и ToString() и добавляет его сам.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 16.02.2015, 21:21   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Этот код тоже вопросы вызывает?
Код:
Person obj = this;
CalcTax(obj);
pu4koff вне форума Ответить с цитированием
Старый 16.02.2015, 21:31   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Я правильно понял?
О-о-о-й как запутанно... У меня у самого от так красочно описанного три кита ООП чуть было планктоном дейтеля не подавились )
Если ты эту свою фразу упростишь то можно сказать что ты понял.
А упростить можно примерно так: "Что б внутри класса не писать имя переменной объекта, ибо оно в рамках класса еще не известно компилятору придумали условное слово this, которое заменяет эту переменную."
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.02.2015, 23:50   #10
hoz
Форумчанин
 
Аватар для hoz
 
Регистрация: 29.06.2013
Сообщений: 132
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Что? Какое новое имя?оО
Я имел ввиду не новое имя, а новое значение переменной, имя которой такое ж как имя переменной передаваемой через параметр метода класса.
hoz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вариант по хаскелу nefilim14 Помощь студентам 0 03.05.2014 11:38
не рекурсивный вариант сортировки mugik770 Помощь студентам 2 13.07.2012 07:41
Ассемблер вариант № 2 arb1337 Помощь студентам 2 27.09.2011 10:42
Массив вариант Asira Помощь студентам 3 30.05.2010 16:21
Павловская вариант 12 Бибик Помощь студентам 1 12.12.2009 20:32