两个类继承一个抽象类

时间:2014-05-23 19:37:36

标签: c# abstract

如果类Example1和类示例2具有传入不同参数的subscribe方法,如何定义抽象方法?

abstract class Test
{
public int _a;
public abstract void Subscribe();
}

class Example1 : Test
{
    public override void Subscribe(int x,int y,int z)
    {
    }
}

class Example2 : Test
{
    public override void Subscribe(string a, bool b)
    {
    }
}

2 个答案:

答案 0 :(得分:5)

易。只需从Subscribe

中取出Test方法即可
abstract class Test
{
    public int _a;
}

那些订阅方法是不同的方法。您需要以与想到具有不同名称的方法相同的方式来考虑它们,即使它们用于类似目的。

如果它们的派生类是唯一的,那么首先你没有理由在基本方法中需要它们。


如果您需要确定在运行时Subscribe调用哪个Test,则可以使用is

if(abc is Example1)
{
    ((Example1)abc).Subscribe(a, b, c);
}

答案 1 :(得分:1)

如果您的目标是仅确保派生类具有 Subscribe方法,并且可以使用一些任意数量的参数,则可以使用:

abstract class Test {
    public abstract void Subscribe(params object[] args);
}

然后,您可以在派生类中实现Subscribe方法,但必须使用params签名,这使得没有编译时间保证您将获得正确类型的参数或量:

class Example1 : Test
{

    public override void Subscribe(params object[] abcd)
    {
        int x = 0;
        int y = 0;
        int z = 0;

        if (abcd[0] is int)
            x = (int) abcd[0];
        else
            // Complain about this
            throw new ArgumentException("The first argument is not an integer");

        // Check for other parameters
        // ...

        Example1Subscribe(x, y, z);
    }

    public void Example1Subscribe(int x, int y, int z)
    {

    }
}