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

本文关键字:抽象类 嵌套 函数 编辑 添加 | 更新日期: 2023-09-27 18:06:25

我有如下所示的抽象类。它的嵌套类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
}

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

需要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 
    }
}

我不确定你想做什么,但是如果你想从C实现B的函数,那么将B标记为抽象并在C中子类化它。然后你可以覆盖抽象的somethingCool方法。像这样:

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
   }
}