Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
Заблокирован

Критерии замены свойств класса методами

29.06.2020, 00:47. Показов 1834. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Если некое свойство "X" некого класса является вычисляемым - имеет только аксессор геттер (выдаёт значение некого выражения, использующего другие свойства в качестве операндов) и никак не используется внутри класса, то его можно заменить неким методом GetX().
Правильно ли его в общем случае заменять на метод GetX()? В каком случае этого делать не надо?
И второй случай. Это вычисляемое свойство "Х" само используется для вычисления другого свойства "Y", которое нигде в классе не используется. Может быть и в этом случае оба этих вычисляемых свойства заменить на методы GetX(), GetY()?
То бишь, правильно ли стремиться к тому, чтобы все вычисляемые свойства в общем случае заменять методами?
Какие критерии тут нужно учитывать при принятии такого решения?
P.S. Наверное, если учитывать ещё оптимальность кода с точки зрения производительности, то во втором случае свойство "Х" нужно оставить свойством с соответствующим приватным полем "х" (поле-то будет рассчитываться 1 раз и использоваться и для геттера свойства "Х" и для метода GetY()). А свойство "Y" преобразовать в метод GetY(). Памяти используется чуть больше (плюс одно поле "x" и одно свойство "X"), но производительность выше. Мда. Выходит, что вопрос этот творческий и в общем случае ничего сказать нельзя?! Или можно?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.06.2020, 00:47
Ответы с готовыми решениями:

Управление функциями/методами класса через свойство класса
Вот, жидкость в голову ударила и появилась идея... дурная :pardon: Как бы так сделать: Есть, к примеру, класс Public Class...

Изменить пола одного класса методами другого класса так, чтобы изменения сохранились в первом классе
Есть простая форма с текстбоксом и тремя кнопками. Нужно следующее: Нажимаем на кнопку 1, записываем значение из текстбокса в переменную....

Создание класса с унаследованными методами класса-предка
Подскажите, как создать класс с унаследованными методами класса-предка?

24
Заблокирован
30.06.2020, 23:20  [ТС]
Студворк — интернет-сервис помощи студентам
escoult, точно) Работает)
В таком случае остается только одна проблема одно ограничение - организовать глубокое копирование этого объекта можно будет только через конструктор копирования.
Через метод копирования DeepCopy() с использованием MemberwiseClone() не получится, поскольку у свойства Ar сеттера нет.
0
1531 / 532 / 127
Регистрация: 09.01.2018
Сообщений: 1,714
30.06.2020, 23:34
Цитата Сообщение от titan4ik Посмотреть сообщение
Через метод копирования DeepCopy() с использованием MemberwiseClone() не получится, поскольку у свойства Ar сеттера нет.
Почему? Ему не нужен сеттер. Оно вычисляется из других свойств. Поскольку они не ссылочные, то ShallowCopy будет достаточно. Но даже если они были бы ссылочные, то DeepCopy потребовался бы по другой причине, чтобы скопировать те свойства из которых вычисляется вычисляемое свойство.
1
Заблокирован
01.07.2020, 00:17  [ТС]
Цитата Сообщение от escoult Посмотреть сообщение
Поскольку они не ссылочные,
Массив-то ссылочный тип. Или я что-то не так понимаю?

Добавлено через 7 минут
Ааа... то есть Ar это не массив, а на самом деле это метод - метод get, который при обращении к нему создает новый массив.
То есть, поверхностное копирование вполне сгодится для данного случая. Так?

Добавлено через 6 минут
Вот с таким трудом осознаются самые простые вещи)
Наверное, теперь уже по мотивам 3-х тем по свойствам (я три раза задавал вопросы по свойствам в последнее время) можно бы написать текст для учебника по разделу "Свойства" - всего несколько страниц, но с полной и понятной информацией)

А может, я один такой тупой?!
0
1531 / 532 / 127
Регистрация: 09.01.2018
Сообщений: 1,714
01.07.2020, 00:27
Цитата Сообщение от titan4ik Посмотреть сообщение
Массив-то ссылочный тип. Или я что-то не так понимаю?
Свойства из которых массив создается - ValueType. Массив да, ссылочный. Но он создается каждый раз из этих свойств в методе get. Т.е. при каждом вызове get будет создан новый массив, состоящий из этих свойств, и его ссылка будет указывать только на этот массив. В его копировании нет никакого смысла, даже если бы это было возможно. Поскольку он зависит от значений других свойств, то надо беспокоиться о том, чтобы были скопированы те свойства, из которых массив создается. А поскольку эти свойства ValueType, поверхностного копирования будет достаточно. (при условии, что в классе нет других ссылочных свойств, разумеется).

Оппс
Не видел вашего сообщения, что вы уже все поняли. Ну ладно
1
Заблокирован
01.07.2020, 00:37  [ТС]
То есть, поверхностное копирование вычисляемого свойства есть глубокое копирование, если это свойство вычисляется на основе свойств типа значения. Хотя само вычисляемое свойство может быть при этом и ссылочного типа - возвращает, как метод (ведь свойство это метод!), ссылочный тип. В общем, нужно каждый раз включать голову и смотреть что реально скрывается за букавами кода.
Понятно, что если бы наше вычисляемое свойство вычислялось с использованием объектов (ссылочный тип), то в методе DeepCopy() для нашего объекта нужно было бы после применения метода MemberwiseClone(), произвести глубокое копирование этих ссылочных объектов (может быть с применением методов DeepCopy(), определенных в соответствующих этим объектам классах). По крайней мере, я именно так делал, когда недавно столкнулся с проблемой копирования.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.07.2020, 00:37

Создать класс Person со свойствами name, gender, age, married и методами чтения/установки этих свойств
Задание: Код: Person.h #include <string> #ifndef PERSON_H #define PERSON_H class Person { private: bool gender,...

Сортировка массива по возрастанию/убыванию методами простого выбора и простой замены
Написать 2 процедуры или функции, которые выполняют сортировку массива по возрастанию ( или по убыванию ) методами простого выбора и...

Изучение свойств энтропии и информации. Определение состояния технической системы методами теории информации
Почему рекомендуется начинать программу поиска с проверки , сумма вероятностей отказов проверяемых блоков для которой близка к 0,5?

получение свойств класса
Здравствуйте. Есть такой код class Cache { var $a = 0; function set($t) { $this->a = $this->a+$t; } }

Работа с внутренними методами класса
Всем привет! Все никак не могу в методе call (аналог конструктора класса) вызвать другой метод, который бы подсчитывал поле класса. ...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru