Как строки работают когда мелкое копирование чего-то в C#?

Функции стрелок захватывают значение this вложенного контекста

function Person(){
  this.age = 0;

  setInterval(() => {
    this.age++; // |this| properly refers to the person object
  }, 1000);
}

var p = new Person();

Итак, чтобы напрямую ответить на ваш вопрос, this внутри вашей функции стрелки будет иметь то же значение, что и раньше, перед назначением функции стрелки.

18
задан danmine 3 February 2009 в 10:29
поделиться

3 ответа

Строки ЯВЛЯЮТСЯ ссылочными типами. Однако они неизменны (они не могут быть изменены), таким образом, действительно не имело бы значения, если бы они скопировали значением или скопировали ссылкой.

, Если они мелко скопированы затем, ссылка будет скопирована..., но Вы не можете изменить их так, Вы не можете влиять на два объекта сразу.

46
ответ дан 30 November 2019 в 05:43
поделиться

Рассмотрите это:

public class Person
{
    string name;
    // Other stuff
}

при вызове MemberwiseClone Вы закончите с двумя отдельными экземплярами Человека, но их name переменные, в то время как отличный, будут иметь то же значение - они обратятся к тому же строковому экземпляру. Это вызвано тем, что это - мелкий клон.

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

26
ответ дан 30 November 2019 в 05:43
поделиться

Вы только копируете ссылка (думайте "указатель"); эти две ссылки являются отдельными (но, окажись, иметь то же значение), но существует только единственный строковый объект.

6
ответ дан 30 November 2019 в 05:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: