В приведенном ниже коде я надеюсь, что в итоге для обоих классов ClassA и Main будет указано, что имя Main - «GoodBye». Однако в конце classA по-прежнему сохраняет имя Main - «Hello», в то время как Main знает, что его имя имеетбыл изменен на «GoodBye».Как разрешить классу A видеть, что имя Main было изменено на GoodBye?
Разве это не разрешено в C # и считается небезопасным, и поэтому вы должны заключить код в блоки «unsafe»?
После тестирования я понимаю, что использование ссылки позволяет classA изменять имя Main, но не позволяет classA видеть, когда имя Main было изменено.
class Program
{
static void Main(string[] args)
{
string MyName = "Hello";
Console.WriteLine($"Main thinks Main's name is: {MyName}");
Console.WriteLine($"");
Console.WriteLine($"Creating ClassA");
ClassA classA = new ClassA(ref MyName);
Console.WriteLine($"Main thinks Main's name is: {MyName}");
classA.WriteOutMainName();
MyName = "GoodBye";
Console.WriteLine($"");
Console.WriteLine($"Main changed it's name to: {MyName}");
Console.WriteLine($"");
Console.WriteLine($"Main thinks Main's name is: {MyName}");
classA.WriteOutMainName();
}
}
public class ClassA
{
string MainName;
public ClassA(ref string mainName)
{
MainName = mainName;
mainName = "Dog";
}
public void WriteOutMainName()
{
Console.WriteLine($"ClassA thinks Main's name is: {MainName}");
}
}
Вывод для вышеследующее:
Main thinks Main's name is: hello
Creating ClassA
Main thinks Main's name is: hello
ClassA thinks Main's name is: hello
Main changed it's name to: GoodBye
Main thinks Main's name is: GoodBye
ClassA thinks Main's name is: hello
Press any key to continue . . .