You basically have three problems:
1) You really need to get Derived.NestedClassout BaseClass.NestedClass.
2) Your property BaseClass.NestedClasswill always have a type BaseClass.NestedClass, so you will need to use it to access the property deeper.
3) , BaseClass.NestedClass Derived.NestedClass Derived.
public class BaseClass {
public NestedClass nestedClass { get; set; }
public BaseClass() {
nestedClass = new NestedClass();
}
public int baseproperty { get; set; }
public class NestedClass {
public int NestedProperty { get; set; }
}
}
public class Derived : BaseClass {
public Derived() {
nestedClass = new NestedClass();
}
public class NestedClass : BaseClass.NestedClass {
public DeeperNestedClass deeper { get; set; }
public NestedClass() {
deeper = new DeeperNestedClass();
}
public class DeeperNestedClass {
public int VeryDeepPropery { get; set; }
}
}
}
class Program {
static void Main(string[] args) {
Derived derived = new Derived();
BaseClass.NestedClass nestedBase = derived.nestedClass;
Derived.NestedClass nestedDerived = (Derived.NestedClass)nestedBase;
Derived.NestedClass.DeeperNestedClass deeper = nestedDerived.deeper;
int property = deeper.VeryDeepPropery;
}
}
:
, - , , ?
public class OuterClass {
public OuterClass() {
nestedClass = new NestedClass();
}
public int baseproperty { get; set; }
public NestedClass nestedClass { get; set; }
}
public class NestedClass {
public NestedClass() {
deeper = new DeeperNestedClass();
}
public int NestedProperty { get; set; }
public DeeperNestedClass deeper { get; set; }
}
public class DeeperNestedClass {
public int VeryDeepPropery { get; set; }
}
class Program {
static void Main(string[] args) {
OuterClass outer = new OuterClass();
int property = outer.nestedClass.deeper.VeryDeepPropery;
}
}