Здравствуйте, Paralax, Вы писали:
P>Почему только строка №1 возвращает новый объект, …
P>1. _regBindBits[i] = new string(value[i].ToCharArray());
Потому что здесь ты явно попросил создать новый объект (оператором
new)
P>… а остальные инструкции (№2 …
2. _regBindBits[i] = (string)value[i].Clone();
Об этом чёрным по-белому (в зависимости от настроек браузера) сказано в
документации:
String.Clone Method
Returns a reference to this instance of String.
…
Return Value
This instance of String.
Remarks
The return value is not an independent copy of this instance; it is simply another view of the same data. Use the Copy or CopyTo method to create a separate String object with the same value as this instance.
Клон обычно используется для получения объекта, при изменения которого исходный объект не затрагивают (или наоборот, который не затрагивают изменения исходного объекта). Но, поскольку string — это неизменяемый (immutable) тип данных, то объекты этого типа в принципе изменить невозможно.
Так что, ИМХО, метод Clone у класса String не нужен во-первых, за своей избыточностью, а, во-вторых, он требуется для реализации интерфейса
ICloneable,
признанный не рекомендуемым для использования).
P>…и №3 в частности) возвращают те же самые объекты …
3. _regBindBits[i] = value[i];
Поскольку string — это ссылочный (reference) тип, то в "_regBindBits[i]" записывается на самом деле ссылка на тот же самый объект, на который хранится ссылка в "value[i]", а ReferenceEqauls как раз-таки ссылки и сравнивает. Поэтому они и дложны быть равны.
P>…(с учетом того, что string особый класс который возвращает копии)?
Что это за особенность с возвращением копий? "Возвращает" откуда?
Здавствуйте, Уважаемые!
Вот такой вопрос,
_regBindBits = new string[value.Length];
for (int i = 0; i < value.Length; ++i)
{
1. _regBindBits[i] = new string(value[i].ToCharArray());
2. _regBindBits[i] = (string)value[i].Clone();
3. _regBindBits[i] = value[i];
}
Почему только строка №1 возвращает новый объект, а остальные инструкции (№2 и №3 в частности) возвращают те же самые объекты (с учетом того, что string особый класс который возвращает копии)? Проверял с помощью object.ReferenceEqauls()
Да, согласен, но это объясняет вариант №2 с присваиванием, однако почему Clone() не отрабатывает должным образом?
Это неверно.
Clone() в общем случае используется для создания копии объекта.
Соответственно инструкция:
string str = (string)str1.Clone();
По идее должна указывать на новый объект отличный от str1.
Однако, оказывается:
"string.Clone() — Returns a reference to this instance of String"
(c) MSDN
Уже разобрались, см.выше
P>>…(с учетом того, что string особый класс который возвращает копии)?
_FR>Что это за особенность с возвращением копий? "Возвращает" откуда?
Сорри, "который возвращает копии" — лишнее скопировал

.
А особый класс, имелось ввиду как раз неизменяемый.