Звучит так, как будто вы описываете обычный способ работы ссылочных типов в 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