Поля и свойства понимания неполадок C # [дубликат]

В новом файле CSS добавьте !important в блок кода, например:

, если у вас есть это на css1.css:

 h2{
 color:#000;
 }

В css4 .css помещает один и тот же элемент, но с !important следующим образом:

 h2{
 color:#ccc !important;
 }

Поэтому !important заставит этот стиль быть во всех отношениях стилем, установленным для элемента, применяется.

97
задан nawfal 25 April 2013 в 08:49
поделиться

5 ответов

Это связано с тем, что Point является типом значения (struct).

Из-за этого, когда вы получаете доступ к свойству Origin, к которому вы обращаетесь к копиям значения, хранящегося в классе, а не самого значения, как и для ссылочного типа (class), поэтому, если вы установите для него свойство X, вы устанавливаете свойство на копии и затем отбрасываете он, оставив исходное значение неизменным. Это, вероятно, не то, что вы намеревались, поэтому компилятор предупреждает вас об этом.

Если вы хотите изменить только значение X, вам нужно сделать что-то вроде этого:

Origin = new Point(10, Origin.Y);
141
ответ дан Greg Beech 28 August 2018 в 19:24
поделиться

Использование переменной подкладочный не поможет. Тип Point - это тип значения.

Вам нужно присвоить целое значение Point свойству Origin: -

Origin = new Point(10, Origin.Y);

Проблема в том, что при доступе к Origin свойство, возвращаемое get, является копией структуры Point в поле «Созданные свойства» автоматически. Следовательно, ваша модификация поля X эта копия не повлияет на базовое поле. Компилятор обнаруживает это и дает вам ошибку, так как эта операция полностью бесполезна.

Даже если вы использовали свою собственную переменную поддержки, ваш get будет выглядеть так: -

get { return myOrigin; }

Вы все равно будете возвращать копию структуры Point, и вы получите ту же ошибку.

Хм ... более внимательно прочитав ваш вопрос, возможно, вы действительно хотите изменить переменную поддержки непосредственно из своего класса: -

myOrigin.X = 10;

Да, это было бы то, что вы хотели бы потребность.

7
ответ дан Flot2011 28 August 2018 в 19:24
поделиться

Проблема заключается в том, что вы указываете на значение, находящееся в стеке, и значение не будет возвращено обратно в свойство orignal, поэтому C # не позволит вам вернуть ссылку на тип значения. Я думаю, вы можете решить эту проблему, удалив свойство Origin и вместо этого используйте публичную подачу, да, я знаю, что это нехорошее решение. Другое решение состоит в том, чтобы не использовать Точку и вместо этого создать свой собственный тип Точки в качестве объекта.

0
ответ дан Fredrik Normén 28 August 2018 в 19:24
поделиться

Я предполагаю, что улов здесь состоит в том, что вы пытаетесь назначить субъекты объекта в инструкции, а не назначать сам объект. Вам нужно назначить весь объект Point в этом случае, так как тип свойства - Point.

Point newOrigin = new Point(10, 10);
Origin = newOrigin;

Надеюсь, что я имел смысл там

0
ответ дан nawfal 28 August 2018 в 19:24
поделиться

Теперь вы уже знаете, что является источником ошибки. Если конструктор не существует с перегрузкой, чтобы взять ваше свойство (в данном случае X), вы можете использовать инициализатор объекта (который будет делать все магическое за кулисами). Не важно, чтобы ваши структуры не были неизменными, а просто предоставляли дополнительную информацию:

struct Point
{
    public int X { get; set; }
    public int Y { get; set; }
}

class MyClass
{
    public Point Origin { get; set; }
}

MyClass c = new MyClass();
c.Origin.X = 23; //fails.

//but you could do:
c.Origin = new Point { X = 23, Y = c.Origin.Y }; //though you are invoking default constructor

//instead of
c.Origin = new Point(23, c.Origin.Y); //in case there is no constructor like this.

Это возможно, потому что это происходит за кулисами:

Point tmp = new Point();
tmp.X = 23;
tmp.Y = Origin.Y;
c.Origin = tmp;

Это выглядит как Очень странная вещь, чтобы сделать, совсем не рекомендуется. Просто перечислите альтернативный путь. Лучший способ сделать это - сделать структуру неизменной и создать соответствующий конструктор.

4
ответ дан neonblitzer 28 August 2018 в 19:24
поделиться
Другие вопросы по тегам:

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