Наследование переменных

Программирование на Юнити.

Наследование переменных

Сообщение EagleOwle 16 апр 2017, 20:33

Приветствую.
Подскажите, кому не лень.
У меня есть базовый класс и несколько классов наследником.
Можно ли как-то, в конкретном классе наследнике, скрыть или заблокировать к изменению, конкретную переменную, которая наследуется от базового класса?
EagleOwle
UNIверсал
 
Сообщения: 493
Зарегистрирован: 02 янв 2015, 16:27

Re: Наследование переменных

Сообщение Paul Siberdt 17 апр 2017, 01:54

Переменные базового класса с областью видимости private недоступны для прямого обращения/изменения из наследуемых классов.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Наследование переменных

Сообщение lawsonilka 17 апр 2017, 10:31

Сделайте переменную свойством, а свойство виртуальным. Перегружайте свойство и блокируйте его изменения. Ну или используйте модификатор new.
lawsonilka
UNIверсал
 
Сообщения: 390
Зарегистрирован: 21 окт 2014, 14:48

Re: Наследование переменных

Сообщение EagleOwle 18 апр 2017, 08:36

lawsonilka, а можно пример кода, а то для меня это сложновато.
Если не сложно...
EagleOwle
UNIверсал
 
Сообщения: 493
Зарегистрирован: 02 янв 2015, 16:27

Re: Наследование переменных

Сообщение ilka 18 апр 2017, 09:20

Синтаксис:
Используется csharp
public class Parent {

 private int parentNumber;
 
 public virtual int number {
  get { return this.parentNumber;}
  set { this.parentNumber = value;}
 }

}

public class Child : Parent {

 [System.Obsolete("Property 'number' is disabled at child instance")]
 public override sealed int number {
  get { throw new OverflowException();}
  set { throw new OverflowException();}
 }

}

Теперь свойство number не будет работать а также будет перечеркнуто для использования в подсказках.
ilka
UNIверсал
 
Сообщения: 478
Зарегистрирован: 21 авг 2015, 19:32

Re: Наследование переменных

Сообщение samana 18 апр 2017, 10:06

ilka писал(а):System.Obsolete

Даже не догадывался о существовании подобной шутки, спасибо!
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Наследование переменных

Сообщение EagleOwle 19 апр 2017, 12:26

Не совсем то, что мне нужно...
Суть в том, что мне нужно, неиспользуемое классом-наследником поле, скрыть для изменений в инспекторе. Или каким либо образом пометить, что в данном классе данное поле не используется.
EagleOwle
UNIверсал
 
Сообщения: 493
Зарегистрирован: 02 янв 2015, 16:27

Re: Наследование переменных

Сообщение samana 19 апр 2017, 13:22

Возможно это повод поразмыслить над тем, а нужно ли это свойство в базовом классе?
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Наследование переменных

Сообщение ilka 19 апр 2017, 13:31

EagleOwle писал(а):Не совсем то, что мне нужно...
Суть в том, что мне нужно, неиспользуемое классом-наследником поле, скрыть для изменений в инспекторе. Или каким либо образом пометить, что в данном классе данное поле не используется.

Пишите свой редактор для скрипта и скрывайте не нужные поля.
ilka
UNIверсал
 
Сообщения: 478
Зарегистрирован: 21 авг 2015, 19:32

Re: Наследование переменных

Сообщение EagleOwle 19 апр 2017, 17:17

В общем решил задачу множественным наследованием (или как это там называется)
В базовом классе оставил поля и методы, которые точно используют все наследники.
От него наследовал уже более "узконаправленные" поля и методу, и от этого уже финальные классы.
Как-то так в общем...
EagleOwle
UNIверсал
 
Сообщения: 493
Зарегистрирован: 02 янв 2015, 16:27

Re: Наследование переменных

Сообщение EagleOwle 23 апр 2017, 12:45

Возник у меня очередной бредовый вопрос.
Можно ли менять атрибуты класса\поля после обьявления, присвоения значения...
Что я хочу добиться.
У меня есть конфиг обьекта. Класс, наследованный от scriptableObject.
В экземпляре управляющего класса есть ссылка на класс конфиг.
При старте я нахожу нужный мне класс-конфиг и сохраняю ссылку на него в управляющем классе.
Соответственно эта ссылка доступна для изменений.
Я хочу, что бы изменения в настройки игрового персонажа можно было вносить только в классе-конфиге, но в инспекторе можно было видеть значения полей
в ссылке на класс-конфиг.
Появилась идея присвоить ссылке на класс-конфиг атрибут readonly, но после того, как ссылка получит нужное её значение.

Немного запутано... но может поможете.
EagleOwle
UNIверсал
 
Сообщения: 493
Зарегистрирован: 02 янв 2015, 16:27

Re: Наследование переменных

Сообщение samana 23 апр 2017, 14:46

EagleOwle писал(а):Я хочу, что бы изменения в настройки игрового персонажа можно было вносить только в классе-конфиге, но в инспекторе можно было видеть значения полей в ссылке на класс-конфиг.

По идее вам нужен эдитор одного типа в эдиторе другого типа https://docs.unity3d.com/ScriptReferenc ... ditor.html
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Наследование переменных

Сообщение EagleOwle 25 апр 2017, 22:20

Продолжаю мучить себя и всех.
Возник такой вопрос...
Что я хочу получить:
Создается конфиг-класс наследованный от objConfig : scriptableObject.
В этом конфиге сериализованные ссылки на классы с описанием частей игрового обьекта.
При чем в зависимости от условия, ссылки должны быть на различные классы.
На пример есть конфиг Ship.
В нем enum {smoll, middle, big}
Если currentEnum == Enum smoll то должна быть ссылка на класс smolShip.
Как-то так...

Как я пытался реализовать:
Создал класс ship.
От него классы smollShip, middleShip, bigShip
В классе - конфиге обьявил поле типа Ship, присвоил ему ссылку на класс smollShip.
Все поля родительского класса доступны, но вот поля и методы класса smollShip, естественно не видны.

Вопрос, как подобный механизм можно реализовать. Что бы в итоге у меня получился класс objConfig : scriptableObject c динамически изменяемыми ссылками.

Извините, если пишу бред. Просто не знаю, как такой конструктор - конфиг можно реализовать.
EagleOwle
UNIверсал
 
Сообщения: 493
Зарегистрирован: 02 янв 2015, 16:27

Re: Наследование переменных

Сообщение seaman 26 апр 2017, 08:17

Я вот не понял чем таким отличается smallShip от middleShip, что под него нужен отдельный класс? Размер, текстуры, модели, стоимость, даже наличие/отсутствие неких пушек - это не отличие требущее отдельного класса.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Наследование переменных

Сообщение EagleOwle 26 апр 2017, 09:45

Про ship-ы я абстрактный пример привел. У меня различные части робота, функционал которых может кардинально отличатся друг от друга.
В идеале я хочу создать конструктор, который по конфигу сам соберет робота. Что бы любой человек мог выбрать нужные части робота, нажать play и робот появится на сцене. Что бы меняя значения в конфиге динамически менялись значения на роботе, прямо в процессе игры. Что б даже меши можно было менять.
Сейчас актуальный вопрос, ссылки на классы, обробатывающие поведение частей робота в классе - конфиге. Как можно реализовать динамическую смену ссылок.
EagleOwle
UNIверсал
 
Сообщения: 493
Зарегистрирован: 02 янв 2015, 16:27

След.

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 11