C# 抽象和静态函数的替换

C# 抽象和静态函数的替换,c#,static,abstract,C#,Static,Abstract,抽象与静态问题 如何在抽象类(AAbstract)中声明Function2? 函数2不能是抽象的和静态的。 我能做什么 interface IInterface { void Function2(); } public abstract class AAbstract : IInterface { //need to be static public static void Function1() { Function2();

抽象与静态问题

如何在抽象类(AAbstract)中声明Function2? 函数2不能是抽象的和静态的。 我能做什么

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();


只能这样叫。除此函数外,所有函数都是私有的。

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

如果您需要在混凝土/子类的实例中传递它,您可以这样做:

public static void Function1(IInterface someInstance) 
{
    someInstance.Function2();
    Function3();
}
然后你可以这样从混凝土类中调用它:

AAbstract.Function1(this);
Function1(this);
甚至像这样:

AAbstract.Function1(this);
Function1(this);

我想读你的代码,当你第一次发布时,具体类中的function2是静态的吗?我被你的接口声明弄糊涂了。我认为您的代码不会编译,因为Abstract需要提供Function2的实现

如果您试图覆盖myClass1和myClass2中function2的实现(并实现IInterface约定),那么静态方法就无法做到这一点


您只是想从一个公共基础上建立继承吗?

从技术上讲,传递接口工作/构建。我想要它做的是MyClass1.Function1()MyClass2.Function1()。因为它是一个静态方法,所以必须向它传递一个对象的实例才能访问实例数据。不管你怎么称呼它。我不认为你有必要通过“这个”,我认为我做错了。我以前在vb中使用mustinherit来实现它。我想要一个公共类。用于继承。函数2与我使用的I类不同。但你总是从函数1开始。MyClass1.Function1()MyClass2.Function1()你有没有想过这个问题?