Рейтинг:
1
OriginalGriff
f
является static
: существует один из них для всего приложения. Потому что оба B
и C
производные от A, они имеют одну и ту же статическую переменную: последнее значение, которое вы зададите ей, будет глобальным значением, которое она имеет, независимо от того, задаете ли вы ее через экземпляр B
или C
Итак, какой из когда-либо созданных экземпляров вы создали совсем недавно, определяет значение f
.
Рейтинг:
0
phil.o
Статический член является одинаковым для каждого экземпляра класса и его производных дочерних элементов.
Решение, которое вы нашли, полностью разрушает смысл наличия статического свойства.
Как вы думаете, почему вам нужно, чтобы свойство было статичным, если оно может быть разным для каждого дочернего класса?
Правка: пример реализации.
public abstract class A
{
public string F { get; protected set; }
}
public class B : A
{
public B()
{
F = "B Class";
}
}
public class C : A
{
public C()
{
F = "C Class";
}
}
Надеюсь, это поможет.
Matrimony
Допустим, у меня есть класс продукта, который имеет поле ProductType. И два дочерних класса, мышь и клавиатура, тип продукта которых-мышь или клавиатура. Таким образом, ProductType можно использовать в области действия каждого дочернего класса.
phil.o
Но это не означает, что свойство ProductType должно быть статическим :)
Matrimony
моя цель-поделиться типом продукта в каждом дочернем классе.
В этом случае есть ли у вас другие предложения? спасибо.
phil.o
Просто оставьте свойство как нестатическое в базовом классе. В конструкторах дочерних классов просто назначьте нужное значение.
Вы можете сделать доступ к имуществу общедоступным для get
и под защитой set
; таким образом, он будет общедоступен для чтения в экземплярах классов, но доступен только для записи из реализаций дочерних классов.
Я обновил свое решение, чтобы дать вам быстрый пример.