Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Почему мы не можем изменить поле структуры объявленной в классе?

#c_sharp


Почему мы не можем изменить поле структуры объявленной в классе?

struct Struct
{
    public int X { get; set; }
}

class Class
{   
    public Struct Struct { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var str = new Class() {Struct = new Struct() {X = 10}};
        Console.WriteLine(str.Struct.X);
        str.Struct.X++;
        Console.WriteLine(str.Struct.X);
    }
}

    


Ответы

Ответ 1



Ответ. Потому что структуры - значимый тип, который копируется при обращении. В классе: class Class { public Struct Struct { get; set; } } При каждом обращении, свойство Struct всегда возвращает копию структуры. При первом обращении вы получаете копию, в которой изменяете значение свойства X. Это изменение касается только копии, оригинал остается нетронутым. При втором обращении, вы получаете еще одну копию оригинальной (не измененной) структуры.

Комментариев нет:

Отправить комментарий