C#编辑和添加函数到嵌套类的抽象类

时间:2016-09-10 14:44:19

标签: c# inheritance unity3d

我有如下所示的抽象类。它是嵌套的B类,我想定义新的功能。

public abstract class A {
    public string varA = "Default";
    public class B {
        public B() {

        }
        public abstract somethingCool(int[] val);
    }
}

public class C:A {
    //set B functions
}

2 个答案:

答案 0 :(得分:0)

您是否有特殊原因要求B成为嵌套类?为什么不让你的A类具有B类属性?此外,somethingCool方法需要返回类型。

public abstract class A 
{
    public string varA = "Default";
    public B InstanceOfB { get; set; }
}

public abstract class B 
{
    public abstract void SomethingCool(int[] val);
}

public class C : A
{
    public override void SomethingCool(int[] val)
    { 
        //do something cool 
    }
}

答案 1 :(得分:0)

我不确定你要做什么,但如果你想从C实现B&#39的功能,那么将B标记为抽象并将其子类化为C.然后你可以覆盖抽象的东西.Cool方法。像这样:

public abstract class A
{
   public string varA = "Default";
   public abstract class B
   {
      public B() {}
      public abstract void somethingCool(int[] val);
   }

   public void Foo(B bar, int[] val)
   {
      bar.somethingCool(val);
   }
}

public class C : A
{
   // set B functions
   public class D : A.B
   {
      public override void somethingCool(int[] val)
      {
         for (int i = 0; i < val.Length; ++i)
         {
            System.Console.Write(string.Format("{0} ", val[i]));
         }         
      }
   }
}

请注意,您也可以从C外部继承B:

public class E : A.B
{
   public override void somethingCool(int[] val)
   {
      for (int i = val.Length - 1; i >= 0; --i)
      {
         System.Console.Write(string.Format("{0} ", val[i]));
      }
   }
}

结果:

public class Test
{
   public void Test()
   {
      int[] val = new int[] { 1, 2, 3 };

      var C = new C();
      var D = new C.D();
      C.Foo(D, val); // should print 1 2 3

      var E = new E();
      C.Foo(E, val); // should print 3 2 1
   }
}