替换抽象和静态函数

时间:2015-02-22 04:16:25

标签: c# static abstract

抽象和静态的问题

如何在我的抽象类(AAbstract)中声明Function2? Function2不能是抽象的和静态的。 我该怎么办?

interface IInterface
{
    void Function2();
}

public abstract class AAbstract : IInterface
{   
    //need to be static
    public static void Function1() 
    {
        Function2();
        Function3();
    }

    private static void Function3()
    {
        //do something private
    }       
}

public class myClass1 : AAbstract
{
    private static void Function2()
    {
        //do something private, specific to this class
    }
}

public class myClass2 : AAbstract
{
    private static void Function2()
    {
        //do something private, specific to this class
    }
}

我称之为:

myClass2.Function1();

myClass1.Function1();

只能这样调用它。除了这个功能,一切都是私密的。

2 个答案:

答案 0 :(得分:0)

您永远无法从静态Function1内部调用子/具体类中的非静态函数Function2!

如果你需要在具体/子类的实例中传递它,你可以这样做:

public static void Function1(IInterface someInstance) 
{
    someInstance.Function2();
    Function3();
}

然后你会从具体的类中调用它:

AAbstract.Function1(this);

甚至就是这样:

Function1(this);

答案 1 :(得分:0)

我想念你的代码,当你第一次发布时,在具体类静态中是function2吗?我对您的界面声明感到困惑。我不认为你的代码会编译,因为AAbstract需要提供Function2的实现。

如果您试图覆盖myClass1和myClass2中的function2的实现(并履行IInterface合约),则无法使用静态方法执行此操作。

您是否只是尝试从共同基础设置继承?