Nano Hash - криптовалюты, майнинг, программирование

C# Как установить или скопировать новый объект в глобальную переменную, которая ссылается на параметр через конструктор

Скажем, у меня есть эти классы и переменные

public class Human {
    public string name;
}

public class Home {
    public Human m_oHuman = null;

    public Home(ref Human p_oHuman) { //note the ref
        m_oHuman = p_oHuman;
    }

    //p_oNewHuman takes over the home
    public void TakeOver(Human p_oNewHuman) { //don't need ref, just need copy
        m_oHuman = p_oNewHuman; //Won't work as intended.
    }
}

//Run this code
public Human homeOwner = new Human { name = "Sally" };
public Home home = new Home(ref homeOwner)
public Human homeStealer = new Human { name = "Daisy" };
home.TakeOver(homeStealer);

То, что я пытаюсь сделать, это передать homeOwner по ссылке и сохранить эту ссылку в глобальной переменной m_oHuman, а позже я хочу попробовать сделать homeOwner "указывающей" на homeStealer или, по крайней мере, копию homeStealer, поскольку она не передается по ссылке. Но, делая это так, как я закодировал, кажется, что m_oHuman теряет начальную ссылку, и поэтому homeOwner все еще «Салли», когда я хочу, чтобы он указывал на p_oNewHuman.

Я думаю, что вместо m_oHuman = p_oNewHuman; я должен пройти и скопировать все переменные из p_oNewHuman в m_oHuman.

Но с кодом, с которым я действительно работаю, есть много членов и классов, которые я пытаюсь заставить работать, как код выше, и я чувствую, что это может стать громоздким, чтобы вручную копировать объектные переменные. Поэтому мне интересно, был ли лучший или более простой способ достичь этой цели.


  • В C# нет глобальных переменных. TakeOver просто заменяет ссылку, хранящуюся в поле m_oHuman, на новую, переданную в качестве параметра метода TakeOver. Кроме того, вы неправильно понимаете, как работает ключевое слово ref. 24.02.2016
  • Вам нужно, чтобы m_oHuman также был ref, но это не разрешено. Не только не разрешено в C#, но и не разрешено CLR. 24.02.2016

Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..