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