Yogi@FLG Ответов: 1

Проблема глобальной переменной в C#


У меня есть конструктор скажем например
private string param1=string.Empty();
private string param2=string.Empty();

public Sample(string x, string y)  
{
param1 = x;
param2 = y;
}


И я вызываю этот конструктор из другого класса
private string x="Welcome";
private string y = "Hello";
Sample obj1=new Sample(x,y);


Теперь в моем примере класса если я изменю значения param1 и param2
даже значения x и y меняются.
В чем может быть проблема с этим вопросом? Каким может быть решение этой проблемы?

Что я уже пробовал:

Изменил все мои переменные как частные.

1 Ответов

Рейтинг:
6

OriginalGriff

В Примере, который вы показываете, этого не происходит - потому что строки неизменяемы, поэтому, когда вы "меняете" строку, вы получаете новую ссылку.
Если с другой стороны вы сделаете это:

private MyClass myX;
public Sample(MyClass x)
   {
   myX = x;
   }
public void SetX(int i);
   {
   myX.I = i;
   }
public int GetX()
   {
   return myX.I;
   }

public class MyClass
   {
   public int I;
   }

MyClass m = new MyClass();
m.I = 111;
Sample s = new Sample(m);
Console.WriteLine(s.GetX());
m.I = 222;
Console.WriteLine(s.GetX());
Тогда да, вы "изменили" значение образца, изменив значение экземпляра MyClass, потому что MyClass-это класс и, следовательно, ссылочный тип.
Это сложно объяснить в маленьком текстовом поле, но это может помочь: Использование структуры и класса - что это такое?[^]- если Вы читаете до раздела -Ну и что это нам даст? Зачем использовать то или другое?" если бы следовало объяснить почему.