私は、さまざまな本で説明されているのを見たことがない方法でデリゲートを使用しようとしています。
私の質問は次のとおりです。
このようにデリゲートを使用することは可能ですか? と
もしそうなら、デリゲートを利用するためにコードをどのように変更すればよいですか?
具体的には、1 つの関数が 2 つの可能な関数の選択から別の関数を呼び出すようにします。
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のインスタンスがわからないことです。しかし、verticalCurve.getElevation を静的にすることはできません。これは、どの verticalCurve にあるかを知る必要があるためです。
質問の設定が長くなって申し訳ありません。私はそれを単純化しようとしましたが、この点を超えて還元できないようです.
よろしくお願いします。
- ポール・シュラム