Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
  • 0
XenoZD

Конструкторы/деструкторы

ДИСКЛЕЙМЕР: если вдруг вы не понимаете о чём речь - вряд ли вам это пригодится когда-либо, просто я дурачок считающий что придумал что-то умное

На сайте богемии вижу фразу "Every class can have one constructor and one destructor". Слова "only" я не вижу. Мне нужна примерно такая конструкция
 

class Foo
{
	private string m_str;
	private int m_num;

	void Foo()
	{
		m_str = "";
		m_num = 0;
	}

	void Foo(string str, int num)
	{
		m_str = str;
		m_num = num;
	}
	
	Foo GetCopy()
	{
		return new Foo(m_str, m_num);
	}
};


Запуск в таком виде + вызове второго конструктора приводит к ошибке TooManyParameters
Запуск БЕЗ конструкторов по умолчанию + вызове конструктора по умолчанию приводит к ошибке NotEnoughParameters

Вопрос - есть ли возможность добавить два конструктора. Если нет, есть ли идеи как это обойти?

Изменено пользователем XenoZD (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендованные сообщения

  • 0

Мне напомнили о слове "полиморфизм", буду использовать его (это трюк выше с одинаковыми названиями, но разными аргументами функции)
Скорее всего в EnScript полиморфизм не распространяется на конструкторы => код выше не реализовать

Кому это всё-таки может пригодиться:
Вариант 1 - использовать конструктор с параметрами со значениями по умолчанию (если дефолтным оказывается массив - на всякий случай создать пустой экземпляр)
Вариант 2 (костыль) - в местах, где должен был быть конструктор без параметров, создать вручную параметры с дефолтными значениями и запихнуть их в новоявленный объект (если таких мест 1-2, может пригодиться)

Изменено пользователем XenoZD
ться (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
MagicByte MagicByte MagicByte
  • 0

Собственно вариант

class Foo
{
	private string m_str;
	private int m_num;

	void Foo(string str = "", int num = 0)
	{
		m_str = str;
		m_num = num;
	}
	
	Foo GetCopy()
	{
		return new Foo(m_str, m_num);
	}
};

в теории должен работать как при

Foo MyParameter = new Foo();

так и при

Foo MyParameter = new Foo("text",5);

Не тестил

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×
×
  • Создать...

Важная информация

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.

Поддержка