2016-09-10 31 views
0

我有如下所示的抽象类。它嵌套的类B是我想定义新函数的地方。C#编辑和添加函数到嵌套类的抽象类

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

什么是你的问题?为什么不是B类抽象的时候它有一个抽象成员? –

回答

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

我不知道你正在尝试做的,但如果你想实现从C B的功能,然后标记B为抽象和继承它。然后,您可以覆盖抽象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])); 
     }   
     } 
    } 
} 

请注意,你也可以子类B,从外面C:

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