Я заметил кое-что в C # при работе с настраиваемыми объектами, что мне показалось немного странным. Я уверен, что это просто непонимание с моей стороны, так что, возможно, кто-то сможет меня просветить.
Если я создаю настраиваемый объект, а затем назначаю этот объект свойству другого объекта, а второй объект модифицирует назначенный ему объект, эти изменения отражаются в том же классе, который выполнил назначение, даже если ничего не возвращается.
Вы хотите это на английском? Вот пример:
class MyProgram
{
static void Main()
{
var myList = new List<string>();
myList.Add("I was added from MyProgram.Main().");
var myObject = new SomeObject();
myObject.MyList = myList;
myObject.DoSomething();
foreach (string s in myList)
Console.WriteLine(s); // This displays both strings.
}
}
public class SomeObject
{
public List<string> MyList { get; set; }
public void DoSomething()
{
this.MyList.Add("I was added from SomeObject.DoSomething()");
}
}
В приведенном выше примере я мог подумать, что, поскольку SomeObject.DoSomething ()
возвращает void, эта программа будет отображать только «Я был добавлен из MyProgram.Main ( ). »
.Однако список List
на самом деле содержит как эту строку, так и «Я был добавлен из SomeObject.DoSomething ()»
.
Вот еще один пример. В этом примере строка остается неизменной. В чем разница и что мне не хватает?
class MyProgram
{
static void Main()
{
var myString = "I was set in MyProgram.Main()";
var myObject = new SomeObject();
myObject.MyString = myString;
myObject.DoSomething();
Console.WriteLine(myString); // Displays original string.
}
}
public class SomeObject
{
public string MyString { get; set; }
public void DoSomething()
{
this.MyString = "I was set in SomeObject.DoSomething().";
}
}
В этом примере программы отображается «Я был установлен в MyProgram.Main ()»
. Увидев результаты первого образца, я мог предположить, что вторая программа перезаписала бы строку с помощью «Я был установлен в SomeObject.DoSomething ().»
. Думаю, я что-то недопонимаю.