实现者类'thefoo'从其构造函数中获取一个整数。但是基类'foo'看不到它的构造函数值'input'。因为基地ctor首先工作。我需要某种方式告诉基础实施者的ctor值。如果不改变基数,我可以通过以下的失败测试吗?
public abstract class foo
{
int noImplementerKnowsThatValue = 0;
protected abstract int intro();
protected abstract int outtro();
public foo()
{
noImplementerKnowsThatValue += intro ();
}
public int compose ()
{
return noImplementerKnowsThatValue + outtro ();
}
}
public class theFoo : foo
{
int value;
public theFoo (int input)
{
value = input;
}
protected override int intro ()
{
return value;
}
protected override int outtro ()
{
return 100;
}
}
public class fooTest
{
public void failingTest ()
{
var foo = new theFoo (100);
int x = foo.compose ();
Debug.Assert (200 == x);
}
}
答案 0 :(得分:2)
你做不到。除非您更改基类,否则不会。
好吧,我想你可以做
protected override int intro ()
{
return 0;
}
protected override int outtro ()
{
return 100 + value;
}
但我认为这不是你的意思。它并没有解决这个问题的一般情况(例如,如果不是int
,那么就会有string
)。
答案 1 :(得分:1)
如果您可以将基类中的noImplementerKnowsThatValue
更改为受保护,则可以执行
public theFoo (int input)
{
base.noImplementerKnowsThatValue = input;
value = input;
}
我认为没有办法在不改变基类的情况下做到这一点。
答案 2 :(得分:1)
除了显而易见的(使outtro返回值+ 100,而不是100),我看不到任何其他不需要更改基类的机制。