2016-09-10 28 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 
    } 
}