C# Dynami c объект не может получить доступ к переменной, как назначено в базовом конструкторе - PullRequest
0 голосов
/ 27 марта 2020

У меня есть динамический 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)?

1 Ответ

1 голос
/ 27 марта 2020

Потому что Type = new Type.Collared (); вызывает базовый конструктор publi c Shirt () {}, а не publi c Shirt (строковый тип), поэтому переменная ProblemVariable не назначена.

...