【问题标题】:Replacement for abstract and static function抽象和静态函数的替换
【发布时间】:2015-02-22 04:16:25
【问题描述】:

抽象和静态的问题

如何在我的抽象类 (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();

只能这样称呼。除了这个函数,一切都是私有的。

【问题讨论】:

  • 我想要一个普通的班级。被继承使用。对于我使用的女巫 myClass,function2 是不同的。但你总是从 Function1 开始。 MyClass1.Function1() MyClass2.Function1()

标签: c# static abstract


【解决方案1】:

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

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

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

然后你会像这样从具体类中调用它:

AAbstract.Function1(this);

甚至像这样:

Function1(this);

【讨论】:

  • 技术上,传递接口工作/构建。我想要它做什么 MyClass1.Function1() MyClass2.Function1().
  • 因为它是一个静态方法,您必须将一个对象实例传递给它才能访问实例数据。不管你怎么称呼它。我没有看到你绕过传递它“这个”的需要
  • 我想我做错了。我曾经在 vb 中使用 mustinherit 来做到这一点。
【解决方案2】:

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

如果您试图在 myClass1 和 myClass2 中覆盖 function2 的实现(并履行 IInterface 协定),则不能使用静态方法来实现。

您只是想从一个公共基础设置继承吗?

【讨论】:

  • 你有没有想过这个问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-27
  • 2011-05-20
  • 2011-11-15
  • 1970-01-01
相关资源
最近更新 更多