如果类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)
{
}
}
答案 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)
{
}
}