Допустим, мы имеем структуруСтрока внутри поведения структуры
struct MyStruct
{
public string a;
}
Когда мы относим его к новой переменной, что будет случилось со строкой? Так, например, мы ожидаем, что строка будет разделяться при копировании структур в стек. Мы используем этот код, чтобы проверить его, но он возвращает различные указатели:
var a = new MyStruct();
a.a = "test";
var b = a;
IntPtr pA = Marshal.StringToCoTaskMemAnsi(a.a);
IntPtr pB = Marshal.StringToCoTaskMemAnsi(b.a);
Console.WriteLine("Pointer of a : {0}", (int)pA);
Console.WriteLine("Pointer of b : {0}", (int)pB);
Вопрос в том, когда копируются Структуры в стеке и есть строка внутри же она разделяет строку или строка воссоздана?
[UPDATE]
Мы также попробовали этот код, он возвращает различные указатели, а также:
char charA2 = a.a[0];
char charB2 = b.a[0];
unsafe
{
var pointerA2 = &charA2;
var pointerB2 = &charB2;
Console.WriteLine("POinter of a : {0}", (int)pointerA2);
Console.WriteLine("Pointer of b : {0}", (int)pointerB2);
}
см. Мое обновление, пожалуйста, имеет смысл? –
«В любом случае вы просто копируете ссылку, когда вы назначаете строку другой строке, поэтому они всегда должны быть одинаковыми», но она возвращает разные указатели на выходе. –
@JevgenijNekrasov, как вы его протестируете, ** всегда ** обеспечивает различные указатели, независимо от ввода. Посмотрите на последнее предложение моего первого абзаца в ответе, либо выполните проверку, используя «ReferenceEquals», либо используйте отладчик VS. – Bas