У меня есть динамический c объект Type
, который я назначаю через конструктор. Вот упрощенная версия моего кода:
public static void Main(string[] args)
{
var x = new Shirt("Collared");
}
class Shirt {
public dynamic Type = new { };
public string ProblemVariable;
public Shirt() { }
public Shirt(string type) {
ProblemVariable = "Assigned in Constructor";
if (type == "Collared") {
Type = new Type.Collared();
}
}
class Type : Shirt {
public Type() { }
public Type(string value)
{
}
}
class Collared : Type { }
В Main (), вызов x.Type.GetType()
возвращает, что мой Dynami c x.Type
является Type.Collared
. В Type.Collared
я хотел бы создать функцию, которая обращается к строке ProblemVariable
из базового класса Shirt
:
class Collared : Type {
public void GetProblemVariable() {
Console.WriteLine(ProblemVariable);
}
}
. При этом возвращается NullReferenceException
. Если я назначу ProblemVariable
как "Not modified"
в определении моего класса:
class Shirt {
public string ProblemVariable = "Not modified";
Моя функция GetProblemVariable возвращает ProblemVariable
как "Not Modified"
.
Хотя я, очевидно, могу получить доступ ProblemVariable
из базового класса Shirt
, почему Type.Collared
не возвращает ProblemVariable как "Assigned in Constructor"
, как определено в конструкторе Shirt(string type)
?