Я действительно не думаю, что есть какой-то способ сделать это ... Во всяком случае ... Как я могу заменить один объект другим в программе? Это будет похоже на то, что все ссылки на старый объект начинают указывать на новый.Как заменить один объект другим в программе?
ответ
Если это во время выполнения, посмотрите на реализацию прокси-сервера или класса-оболочки для экземпляра, который вы можете потенциально заменить.
Существуют и другие более сложные способы достижения такого же эффекта, это самый простой.
class Program {
public void DoReplace() {
// all instances in the program hold references to the proxy
// instantiate the default
ReplaceableProxy replaceable = new ReplaceableProxy();
// some references to the replaceable are aquired
// later
replaceable.SetPoxiedClass(new OtherImplementation());
// now all instances still hold a reference to the same proxy
// but the implementation has changed internally since the indirection is encapsulated
// in the proxy class
}
}
public interface IReplaceable {
void DoStuff();
}
public class ReplaceableProxy : IReplaceable { // this is the proxy
private IReplaceable _Replaceable = new OriginalImplementation();
public void DoStuff() {
_Replaceable.DoStuff();
}
internal void SetPoxiedClass(IReplaceable replaceable) {
_Replaceable = replaceable;
}
}
public class OriginalImplementation : IReplaceable {
public void DoStuff() {
System.Console.WriteLine("original");
}
}
public class OtherImplementation : IReplaceable {
public void DoStuff() {
System.Console.WriteLine("other");
}
}
Remoting? Я имею в виду всех этих «маршалов по refs». Или вы говорите о каком-то архитектурном решении/шаблоне? – Yegor
Если вы имеете в виду в коде, вы можете найти замену имени объекта. Так найти Objecta Заменить ObjectB
вы не можете легко запросить кучу с отражением или что-то еще, вы могли бы, однако отслеживать все ваши объекты, используя список слабых ссылок и найти ваш объект таким образом ...
Спасибо, что указал на слабые ссылки. Взгляды googlable, и поэтому я собираюсь узнать больше. – Yegor
Я do переименовывает старый объект, а затем пусть ошибки сборки компилятора показывают мне всюду, я должен внести изменения.
Это зависит от вашей IDE. Например, в Eclipse есть вкладка «Refactor» наверху, которая позволит вам переименовать выделенный класс и обновить все ссылки на него в вашем пакете (убедитесь, что вы проверяете вкладку «ссылки на обновления»).
Если модификатор доступа на объект установлен в Friend
, Protected Friend
или Public
и ссылка на объект только не читается (т.е., это изменяемый), то вы можете просто повторно назначить его.
В VB:
Public strSQLConnect as String = "CONNECT....."
'blah... blah... using the variable... hours later
strSQLConnect = "CONNECT DIFFERENTLY....."
Я не уверен, что это то, что вы хотите, но, возможно, это поможет вам.
Если вы хотите заменить экземпляры ClassA экземплярами ClassB (как в приведенном выше примере), перейдите с помощью решения @ MaLio выше ... в противном случае (т.е. если вы хотите заменить все ссылки на экземпляр ClassA со ссылками на Instance2 of ClassA), то ...
public class Reference<T> {
private T _instance;
public Reference(T instance) {
_instance = instance;
}
public T Instance {
get { return _instance; }
}
public event EventHandler<ReferenceReplacedEventArgs> ReferenceReplaced;
public void ReplaceWith(T newInstance) {
T oldInstance = _instance;
_instance = newInstance;
if(ReferenceReplaced != null) {
ReferenceReplaced(this, new ReferenceReplacedEventArgs(oldInstance, newInstance));
}
}
public class ReferenceReplacedEventArgs : EventArgs {
private readonly T _oldInstance;
private readonly T _newInstance;
public ReferenceReplacedEventArgs(T oldInstance, T newInstance) {
_oldInstance = oldInstance;
_newInstance = newInstance;
}
public T OldInstance {
get { return _oldInstance; }
}
public T NewInstance {
get { return _newInstance; }
}
}
}
- 1. Отражение, динамический. Как заменить один объект другим?
- 2. Заменить один объект javascript другим объектом
- 3. Заменить один URL другим
- 4. javascript - Заменить объект другим
- 5. Заменить один div другим - jQuery
- 6. Невозможно заменить один файл другим
- 7. Regex: Заменить один шаблон другим
- 8. Заменить один каталог с другим
- 9. Заменить один объект python другим во всем мире
- 10. Как заменить один HTML элемент с другим
- 11. iOS Как заменить один tabBarController другим ViewController?
- 12. Заменить «Выбрать один» другим текстом программно
- 13. Можно ли временно заменить один класс другим?
- 14. Заменить один проект другим в git-репозитории
- 15. Заменить один шрифт другим в Chrome?
- 16. Заменить один фрагмент другим в ViewPager
- 17. JavaScript replace() один html объект с другим
- 18. Как сделать один объект за другим
- 19. заменить один элемент другим, когда он существует
- 20. Заменить один об/мин pkg другим
- 21. Заменить один компонент другим с помощью анимации
- 22. Программно заменить один плагин CMS django другим
- 23. заменить один div другим на зависание
- 24. Заменить один элемент управления с другим
- 25. Android: заменить один вид с другим
- 26. Python: Заменить один список другим списком?
- 27. Заменить один JTable другим (Импорт) Java
- 28. Заменить один список массивов другим списком
- 29. Gradle зависимостей - заменить один модуль с другим
- 30. Заменить текущий объект источника привязки другим объектом
Возможно ли это во время выполнения? – ChrisF
Runtime, время компиляции, время развертывания или что? –
Да, это во время выполнения. – Yegor