Extending a nested class in a C # derived class

I want to have a base class with a nested class inside it - and deploy the nested class in a child class: For some reason - I cannot access the properties of the Nested Derived Class NEW (added):

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 class NestedClass
    {
          public DeeperNestedClass deeper {get; set;}
          public NestedClass()
          {
              deeper = new DeeperNestedClass();
          }
          public class DeeperNestedClass
          {
               public int VeryDeepPropery {get; set;}
          }


    }
}

Derived MyDerived = new Derived();
MyDerived.nestedClass.deeper   <----- Doesn't recognized !

* edit - fixed the missing "class" in the base class

+4
source share
3 answers

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;
   }
}
+3

, , NestedClass class partial :

public partial class NestedClass  // You forgot those two here...
{
    public int NestedProperty { get; set; }
}

, , . , : http://msdn.microsoft.com/en-us/library/wa80x488(v=vs.120).aspx

.. , . cremor , , .

+3

, .

, ?

Namespace.BaseClass.NestedClassor Namespace.Derived.NestedClass? It would be unreasonable for different names to refer to the same class.

For the same reason, you cannot have it in different namespaces.

A possible solution would be to create an interface:

interface INested { }

And make your common BaseClass set:

class BaseClass<T> where T : INested, new()
{
   public T Nested { get; set; }
   public BaseClass()
   {
       Nested = new T();
   }
}

class Derived : BaseClass<NestedImpl>
{
   Derived()
   {
       Nested = new NestedImpl();
   }

   public class NestedImpl : INested
   {
       public int deeper {get;set;}
   }
}
+2
source

All Articles