Сделать переменную указывающей на другую переменную - PullRequest
0 голосов
/ 09 октября 2018

Мне нужен экземпляр, который является указателем другого экземпляра.По сути, у меня будут два экземпляра с именами A и B , созданные из одного класса.всякий раз, когда я буду изменять атрибут экземпляра A, атрибут экземпляров B будет изменен.По сути, атрибуты будут иметь одинаковый адрес в памяти.

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

Как я могу сделать это в Unity с помощью c #?

Ответы [ 3 ]

0 голосов
/ 09 октября 2018

У меня будет 2 экземпляра одного типа.Всякий раз, когда один из них будет отредактирован, другой должен быть отредактирован.

Я просто хочу получить тот же объект с разными именами переменных.

Вы можете использовать свойства, чтобы подделатьуказывая на другую переменную.Это легко сделать с помощью аксессоров get и set.

Предположим, что основная переменная имеет имя Score:

public int score;

Вы можете указать на переменную Score двумя другимипеременные:

public int scoreWithDifferentName1
{
    get { return score; }
    set { score = value; }
}

и

public int scoreWithDifferentName2
{
    get { return score; }
    set { score = value; }
}

Теперь вы можете изменить переменную счета или получить к ней доступ с помощью двух указанных выше переменных свойств:

scoreWithDifferentName1 = 0;
Debug.Log(scoreWithDifferentName1);

Или

scoreWithDifferentName2 = 3;
Debug.Log(scoreWithDifferentName2);

Другой вариант - использовать IntPtr, но это не обязательно.Свойство C # достаточно, чтобы дать вам то, что вы хотите.Это работает как для значений, так и для ссылочных типов.

0 голосов
/ 09 октября 2018

Звучит так, как будто вы описываете обычный способ работы ссылочных типов в C #:

public class MyClass
{
    public string Name {get;set;}
}

void Test()
{
    var a = new MyClass();
    a.Name = "Test";
    var b = a;

    Console.WriteLine(a.Name); // "Test"
    Console.WriteLine(b.Name); // "Test"

    b.Name = "MossTeMuerA";
    Console.WriteLine(a.Name); // "MossTeMuerA"
    Console.WriteLine(b.Name); // "MossTeMuerA"

    Mutate(a);
    Console.WriteLine(a.Name); // "John"
    Console.WriteLine(b.Name); // "John"
}

void Mutate(MyClass myClass)
{
    myClass.Name = "John";
}

Пример 1

Обратите внимание, что если вы хотите изменить, какойЭкземпляр класса, на который указывает переменная, на которую указывает метод, необходимо использовать ключевое слово ref:

void Test()
{
    var a = new MyClass();
    a.Name = "Test";
    var b = a;

    Console.WriteLine(a.Name); // "Test"
    Console.WriteLine(b.Name); // "Test"

    Mutate(ref a);
    Console.WriteLine(a.Name); // "John"
    Console.WriteLine(b.Name); // "Test"
}

void Mutate(ref MyClass myClass)
{
    myClass = new MyClass();
    myClass.Name = "John";
}

Пример 2

Существует также другое ключевое слово,out, который позволяет методу создавать экземпляр объекта в области вызова, передавая переменную, которую вы хотите заполнить:

void Test()
{
    MyClass a;
    Instantiate(out a);
    Console.WriteLine(a.Name); // "John"
}

void Instantiate(out MyClass myClass)
{
    myClass = new MyClass();
    myClass.Name = "John";
}

Пример 3

0 голосов
/ 09 октября 2018

Это похоже на вопрос о том, как вы хотите, чтобы ваши классы выглядели и каковы их обязанности.Я не уверен, какова цель класса, о котором вы говорите, но очевидным решением здесь является атрибут с модификатором static .Добавление статического атрибута в ваш класс гарантирует, что он будет иметь одинаковое значение во всех экземплярах, например:

public class ClassX
{
    public static string staticVar = "This is a static string";
    private string var1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...