В новом файле CSS добавьте !important
в блок кода, например:
, если у вас есть это на css1.css:
h2{
color:#000;
}
В css4 .css помещает один и тот же элемент, но с !important
следующим образом:
h2{
color:#ccc !important;
}
Поэтому !important
заставит этот стиль быть во всех отношениях стилем, установленным для элемента, применяется.
Это связано с тем, что Point
является типом значения (struct
).
Из-за этого, когда вы получаете доступ к свойству Origin
, к которому вы обращаетесь к копиям значения, хранящегося в классе, а не самого значения, как и для ссылочного типа (class
), поэтому, если вы установите для него свойство X
, вы устанавливаете свойство на копии и затем отбрасываете он, оставив исходное значение неизменным. Это, вероятно, не то, что вы намеревались, поэтому компилятор предупреждает вас об этом.
Если вы хотите изменить только значение X
, вам нужно сделать что-то вроде этого:
Origin = new Point(10, Origin.Y);
Использование переменной подкладочный не поможет. Тип Point
- это тип значения.
Вам нужно присвоить целое значение Point свойству Origin: -
Origin = new Point(10, Origin.Y);
Проблема в том, что при доступе к Origin свойство, возвращаемое get
, является копией структуры Point в поле «Созданные свойства» автоматически. Следовательно, ваша модификация поля X эта копия не повлияет на базовое поле. Компилятор обнаруживает это и дает вам ошибку, так как эта операция полностью бесполезна.
Даже если вы использовали свою собственную переменную поддержки, ваш get
будет выглядеть так: -
get { return myOrigin; }
Вы все равно будете возвращать копию структуры Point, и вы получите ту же ошибку.
Хм ... более внимательно прочитав ваш вопрос, возможно, вы действительно хотите изменить переменную поддержки непосредственно из своего класса: -
myOrigin.X = 10;
Да, это было бы то, что вы хотели бы потребность.
Проблема заключается в том, что вы указываете на значение, находящееся в стеке, и значение не будет возвращено обратно в свойство orignal, поэтому C # не позволит вам вернуть ссылку на тип значения. Я думаю, вы можете решить эту проблему, удалив свойство Origin и вместо этого используйте публичную подачу, да, я знаю, что это нехорошее решение. Другое решение состоит в том, чтобы не использовать Точку и вместо этого создать свой собственный тип Точки в качестве объекта.
Я предполагаю, что улов здесь состоит в том, что вы пытаетесь назначить субъекты объекта в инструкции, а не назначать сам объект. Вам нужно назначить весь объект Point в этом случае, так как тип свойства - Point.
Point newOrigin = new Point(10, 10);
Origin = newOrigin;
Надеюсь, что я имел смысл там
Теперь вы уже знаете, что является источником ошибки. Если конструктор не существует с перегрузкой, чтобы взять ваше свойство (в данном случае 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;
Это выглядит как Очень странная вещь, чтобы сделать, совсем не рекомендуется. Просто перечислите альтернативный путь. Лучший способ сделать это - сделать структуру неизменной и создать соответствующий конструктор.