Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
 Аватар для tesler
3 / 3 / 4
Регистрация: 08.04.2011
Сообщений: 201

Что делает this

29.07.2013, 13:19. Показов 3161. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
мог бы кто-нибудь прокоментировать это:

C#
1
2
3
4
5
6
7
8
9
public class Panda
{
 public Panda Mate;
 public void Marry (Panda partner)
 {
   Mate = partner;
   partner.Mate = this;// что в данном случае делает this?
  }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.07.2013, 13:19
Ответы с готовыми решениями:

Что делает код?
Добрый день. Требуется помощь по Linq. Может кто-нибудь обьяснить, что делает код после String.Join? Заранее спасибо! word =...

Что делает isReady ?
Что делает !isReady? public partial class Calculator : Window { string Answer = null, Memory = null; bool...

Что делает оператор => ?
Какую функцию выполнят оператор => в шарпе?

35
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
29.07.2013, 13:23
this - это указатель на текущий экземпляр данного класса
0
 Аватар для tesler
3 / 3 / 4
Регистрация: 08.04.2011
Сообщений: 201
29.07.2013, 13:43  [ТС]
это я и сам прочитал.
т.е.:
C#
1
Panda specimen = new Panda();// фактически specimen можно было бы прописать вместо this?
а левая часть?

C#
1
2
3
                           //  2 переменные одного класса указывают на одну область памяти...
 partner.Mate = this; // так еще и через точку прописываются, как будто это метод какой-то?
                         // может быть для кого-то и глупый вопрос, но разъясните пожалуйста...
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
29.07.2013, 13:52
Присваивает значение полю Mate, у объекта partner.
Что вызывает сложность то? Вроде примитивное действие.
1
 Аватар для tesler
3 / 3 / 4
Регистрация: 08.04.2011
Сообщений: 201
29.07.2013, 13:56  [ТС]
turbanoff, бывает...
0
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
29.07.2013, 14:44
Сейчас поясню.
0
 Аватар для tesler
3 / 3 / 4
Регистрация: 08.04.2011
Сообщений: 201
29.07.2013, 14:45  [ТС]
body90, =)сейчас это когда?
0
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
29.07.2013, 14:53
Вот, к примеру
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            MyClass my = new MyClass("MyName", 10);
        }
    }
 
    class MyClass
    {
        string name;
        int size;
 
        public MyClass(string name, int size)
        {
            this.name = name;
            this.size = size; //так нормально работает
            //size = size; //а это просто переприсваивание
        }
    }
}
2
 Аватар для tesler
3 / 3 / 4
Регистрация: 08.04.2011
Сообщений: 201
29.07.2013, 15:03  [ТС]
Уважаемые форумчане, эти строки кода загнали меня в ступор...
объявляем поле класса
дальше метод, в который передается объект этого же класса
дальше полю приравнивается переданный объект

Допустим где-то объявлен экземпляр этого класса

C#
1
2
Panda specimen = new Panda();
specimen.Merry(что-то передаем);
дальше устанавливаем значение поля в "то, что передали"
а дальше, вот этой замечательной строкой кода:
C#
1
 partner.Mate = this;
говорим: полю объекта приравнять экземпляру этого класса...

Добавлено через 2 минуты
body90, у вас понятный пример, такого рода логику я понимаю, я не понимаю логику приведенного мной примера выше...
0
 Аватар для Anklav
447 / 305 / 47
Регистрация: 23.01.2013
Сообщений: 661
29.07.2013, 16:12
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        void Method()
        {
            SomeClass one = new SomeClass();
            SomeClass two = new SomeClass();
 
            //эти две строки делают одно и тоже.
            one.Set(two);
            two.next = one;
        }
 
    class SomeClass
    {
        public SomeClass next;
 
        public void Set(SomeClass @class)
        {
            //здесь мы присваиваем полю другого класса, ссылку на этот класс
            @class.next = this;
        }
    }
Добавлено через 12 минут
Ну а если непонятно зачем такое нужно делать то вот пример:
Есть класс таблицы. Таблицу можно заполнять допустим цифрами. Также таблица должна поддерживать ячейки ссылки, которые будут ссылаться на уже имеющиеся ячейки. Проще всего это реализовать добавив в базовый класс ячейки ссылку на таблицу в которой находится ячейка. Таким образом ячейка-ссылка будет обращаться к таблице, доставать нужные ей данные из другой ячейки и показывать их, при этом сама их не хранить.
1
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
29.07.2013, 16:46
Цитата Сообщение от tesler Посмотреть сообщение
я не понимаю логику приведенного мной примера выше
всё стало бы понятно, если бы ты перевел на русский

У тебя есть класс (тип) панда, у него свойство - партнер (тоже типа панда), и метод "жениться", в который в качестве партнера передается экземпляр типа панда. В этом методе устанавливается, что поле партнер текущего экземпляра становится равным переданному параметру, в это же время партнером переданного экземпляра становится текущая панда. Таким образом методом "жениться", две панды связываются между собой и становятся партнерами.
2
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
29.07.2013, 20:45
Цитата Сообщение от tesler Посмотреть сообщение
C#
1
partner.Mate = this;
Очень просто пример из жизни. Вы создаете объект какого-то контролла в классе формы. Потом этому контроллу нужно указать родительскую форму. Указателем на эту форму является this. Вот вы и делаете что-то типа
C#
1
myControll.Parent = this;
Теперь из кода контролла Вы можете получить доступ к объекту его родительской формы.

Добавлено через 2 минуты
В вашем случае есть две панды (2 объекта). И Вы одной панде в партнеры (помощники) отдаете другую панду. Что тут сложного?
1
 Аватар для tesler
3 / 3 / 4
Регистрация: 08.04.2011
Сообщений: 201
29.07.2013, 21:12  [ТС]
Anklav,
Цитата Сообщение от Anklav Посмотреть сообщение
Есть класс таблицы. Таблицу можно заполнять допустим цифрами. Также таблица должна поддерживать ячейки ссылки, которые будут ссылаться на уже имеющиеся ячейки. Проще всего это реализовать добавив в базовый класс ячейки ссылку на таблицу в которой находится ячейка. Таким образом ячейка-ссылка будет обращаться к таблице, доставать нужные ей данные из другой ячейки и показывать их, при этом сама их не хранить.
ммм...есть таблица, есть ссылки на ячейки таблицы, в которых находятся какие-то значения(в самих ячейках), допустим цифры... середнину не могу понять...то что из ячейки можно достать значение посредством ссылки-это тоже понятно...
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
29.07.2013, 21:30
tesler, этот код аналогичен следующему:
C#
1
2
3
4
5
6
7
8
9
10
public class Panda
{
 public Panda Mate;
 public static void Marry (Panda one, Panda other)
 {
   one.Mate = other;
   other.Mate = one;
   
  }
}
Только вместо a.Marry(b) придется писать Panda.Marry(a,b)
2
 Аватар для Евгений В
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
29.07.2013, 22:52
tesler,

Может будет чуть понятней, если кроме изучения класса вы в "живую" создадите оба объекта (партнера)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
        public class Panda
        {
            public string Name { get; set; }
       
            public Panda(string _name)
            {
                Name = _name;
            }
            
            public Panda Mate;
            public void Marry(Panda partner)
            {
                Mate = partner; // для этого экземпляра запоминаем в поле Mate другой экземпляр (партнер). Далее с ним можно работать
                partner.Mate = this; // в тоже время и в экземпляре партнер в ЕГО поле Mate запоминаем этот (this)  экземпляр
            }
        }
        
        static void Main(string[] args)
        {
            Panda panda1 = new Panda("Ленивый");
            Panda panda2 = new Panda("Лариска");
 
            panda1.Marry(panda2); //женим их
 
            Console.WriteLine("у панды {0} партнер {1}", panda1.Name, panda1.Mate.Name);
            Console.WriteLine("у панды {0} партнер {1}", panda2.Name, panda2.Mate.Name);
        }
2
 Аватар для tesler
3 / 3 / 4
Регистрация: 08.04.2011
Сообщений: 201
29.07.2013, 23:22  [ТС]
Да зачем!!!Да зачем, так изгаляться...какие-то абсолютно мутные присваивания!!!
0
 Аватар для Евгений В
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
29.07.2013, 23:34
Цитата Сообщение от tesler Посмотреть сообщение
Да зачем!!!Да зачем, так изгаляться...какие-то абсолютно мутные присваивания!!!
Разве не вы спрашивали смысл this ?
0
 Аватар для tesler
3 / 3 / 4
Регистрация: 08.04.2011
Сообщений: 201
29.07.2013, 23:36  [ТС]
Как говорится, самое сложное-это понять самое простое...не судите строго...
Поля класса, это данные над которыми производятся какие-то действия...
Но, вот это:
C#
1
public Panda Mate;
и это:

C#
1
partner.Mate
это что-то с чем-то,,,

это получается не данные, а что-ли выразиться бы попонятней, "пустое место" что-ли какое-то, которое затем чем-то заполняется...
как это по-русски будет звучать то, что написано - "Поле класса типа этого же класса"... Как вышло, явно с этим никогда не сталкивался...поэтому такие вот проблемы...
0
 Аватар для Евгений В
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
29.07.2013, 23:49
Цитата Сообщение от tesler Посмотреть сообщение
partner.Mate
означает, что у ранее созданного объекта (экземпляра) partner вызывается его поле Mate.

Вы понимаете разницу между классом и экземпляром?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
29.07.2013, 23:51
Цитата Сообщение от tesler Посмотреть сообщение
как это по-русски будет звучать то, что написано - "Поле класса типа этого же класса"... Как вышло, явно с этим никогда не сталкивался...поэтому такие вот проблемы...
как бы это одна из очень частовстречаемых вещей, особенно в построении списков и деревьев. Я сам подобный код писал много раз, как и другие... Связный список без такой архитектуры вы не сможете построить ни-ког-да.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.07.2013, 23:51
Помогаю со студенческими работами здесь

Что делает этот код?
private List<Visual> visuals = new List<Visual>(); protected override Visual GetVisualChild(int index) { return visuals; } И как...

Что делает метод потокобезопасным?
Я гуглил, но довольно часто встречается разнородная информация из которой трудно получить однозначный ответ. Помогите разобраться,...

Что делает метод ToString()?
Что делает метод ToString()?

Что делает этот код?
Здравствуйте. Объясните, пожалуйста, как работает этот код? Если можно, прокомментируйте, пожалуйста, каждую функцию. Заранее, спасибо...

Что делает конструкция c get и set
что делает код public int Index { get; set; } ? Хочу сказать что хорошо знаком с ООП на примере С++, но там я прописивал методы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru