我正在尝试以我在我的各种书籍中从未见过的方式使用委托。
我的问题是:
是否可以以这种方式使用代表? 和
如果是这样,我应该如何更改代码以使用委托?
具体来说,我希望一个函数从两个可能的函数中调用另一个函数。
class Profile
{
private List<verticalCurve> allVCs;
// create allVCs in the constructor
private double nonTrivialFunctionToFindTheRightVCin_allVCs
(double lengthAlong, getSwitchForProfile aDel)
{ // about thirty lines of code which I want to reuse }
public double getElevation(double distanceAlongPfl)
{
// compiler error on the following line:
getSwitchForProfile myDelEL =
new verticalCurve.getSwitchForProfile(verticalCurve.getElevation);
return nonTrivialFunctionToFindTheRightVCin_allVCs
(distanceAlongPfl, myDelEL);
}
public double getSlope(double distanceAlongPfl)
{
// compiler error on the following line:
getSwitchForProfile myDelSL =
new verticalCurve.getSwitchForProfile(verticalCurve.getSlope);
return nonTrivialFunctionToFindTheRightVCin_allVCs
(distanceAlongPfl, myDelSL);
}
} // end class Profile
class verticalCurve
{
private double elevation;
private double slope;
static internal delegate double getSwitchForProfiles(double distanceAlongPfl);
public double getElevation(double distanceAlong)
{ computeElevation then return elevation; }
public slope getSlope(double distanceAlong)
{ compute slope then return slope;}
} // end class verticalCurve
编译器错误状态
非静态字段、方法或属性“Profile.verticalCurve.getElevation(distanceAlong)”需要对象引用
看来我的问题是,在我为委托分配一个方法时,我还不知道它将在哪个垂直曲线实例上被调用。但我不能将verticalCurve.getElevation设为静态,因为它必须知道它在哪个verticalCurve上。
很抱歉对问题进行了长时间的设置。我确实尝试过简化它,但超出这一点似乎无法简化。
在此先感谢您的帮助。
- 保罗·施鲁姆