У меня есть иерархия классов (в .NET 3.5), как показано ниже:Изменение типа переменной во время выполнения
Parent
- Child1
- Child2
- Child3
У меня есть базовый класс, как показано:
public abstract class BaseClass
{
protected Parent field;
public BaseClass(Parent someField)
{
this.field = someField
}
public string Property1
{
get { return field.Child1Property; }
set { field.Child1Property = value; }
}
}
Параметр, который я прохождение в конструкторе будет одним из детей. Есть ли способ доступа к свойствам Child с помощью переменной типа «Родитель»?
В качестве альтернативы, можно сделать это:
public abstract class BaseClass
{
protected Parent field;
protected Type childType; //Type? Or something else?
public BaseClass(Parent someField)
{
//assign the runtime type of someField to childType
this.field = someField
}
public string Property1
{
get { return ((childType)field).Child1Property; } //Is this possible?
set { ((childType)field).Child1Property = value; }
}
}
Если я использую тип это, кажется, не работает, поскольку (поле (childType)) .Child1Property не допускается. Проблема в том, что я только узнаю, какой тип ребенка передается во время выполнения, поэтому приведение поля к соответствующему типу не представляется возможным.
Помощь!
как объект __dynamic__ HTTP://msdn.microsoft.com/en-us/library/dd264736.aspx – corn3lius