@dalvreg

Как изменить тип объекта внутри самого объекта?

Возможно ли сделать так, чтобы во время выполнения функции экземпляра класса А при определённых условиях этот объект заменял сам себя на экземпляр класса В?
Соответственно и все переменные, ссылающиеся на этот объект должны указывать уже на экземпляр класса В, а не А.

Например так:
Class A
{
  public void Transform()
  {
    this = new B();
  }
}

только чтобы работало.

А и В - дочерние классы одного и того же класса C. Отличаются только реализацией некоторых функций, если это имеет значение.
  • Вопрос задан
  • 260 просмотров
Решения вопроса 2
freeExec
@freeExec
Участник OpenStreetMap
Так как вы пытаетесь нельзя.
Создайте класс хранилище, который будет всем желающим отдавать А или Б (в виде класса С). А при необходимости заменять их.
Ответ написан
Комментировать
vabka
@vabka Куратор тега C#
Токсичный шарпист
Так сделать нельзя.
И скорее всего вы что-то делаете не так, если решили так сделать.

Если у вас данные не меняются, но иногда меняется поведение - есть смысл вынести это поведение в новый класс, и подменять уже его.

Но если очень хочется - сделайте метод, который будет возвращать нужный тип, а на вход к нему подавать исходный.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
любопытна уверенность коллег... но жаль тратить время на проверку, увы ))

мне кажется что это возможно в двух, или хотя бы в одном случае (вот только нужны ли они вам?)
- без проверки не уверен на 100%, но полагаю возможно, если кто из них наследник Class A : B или наоборотClass B : A эту версию как раз надо проверять
- точно возможно, если object A

pps еще запаска - dynamic A но риски гимора такие же /pps

но даже если хоть один из вариантов скомпилируется, это минное поле ошибок и гимора. вот это единственное, что могу гарантировать точно

ps ваш вопрос скорее в разрезе одного из "вечных споров" что лучше? статическая? или динамическая? типизация?

возможно, вашу задачу, можно элегантно решить на другом языке. но только при условии, что она не критична к производительности.. и да, еще условие - объем кода способен удержать в голове один автор, и длительное время понимать собственную логику (а ваш вопрос похож на вопрос новичка, без обид ;))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы