0

以下のコードを Java から C# に変換するのに苦労しています。

        this.document.add(new VerticalPositionMark() {
            @Override
            public void draw(final PdfContentByte canvas, final float llx, final float lly, final float urx, final float ury, final float y)
            {
                final PdfTemplate createTemplate = canvas.createTemplate(50, 50);
                Main.this.tocPlaceholder.put(title, createTemplate);

                canvas.addTemplate(createTemplate, urx - 50, y);
            }
        });

C# でインスタンス化をオーバーライドできるかどうかはよくわかりません。存在しない場合、コードを複製して必要なものを実現する方法はありますか?

4

1 に答える 1

0

C# には、Java で知っているような匿名クラスはありません (他のクラスを拡張したり、インターフェイスを実装したりすることはできません)。ラムダ式を使用することをお勧めしますが、オプションではないフレームワークを使用しているためです。

開始 Java コードを次のように考えてください。これは、匿名内部クラスを名前付きクラスに抽出します。

public class ContextClass
{
    public void ContextMethod()
    {
      this.document.add(new CustomVerticalPositionMark(title, this.tocPlaceholder));
    }
}

class CustomVerticalPositionMark extends VerticalPositionMark
{
    final String title;
    final PlaceHolder tocPlaceholder;

    CustomVerticalPositionMark(String title, PlaceHolder tocPlaceholder)
    {
        this.title = title;
        this.tocPlaceholder = tocPlaceholder;
    }

   @Override
   public void draw(final PdfContentByte canvas, final float llx, final float lly, final float urx, final float ury, final float y)
   {
       final PdfTemplate createTemplate = canvas.createTemplate(50, 50);
       tocPlaceholder.put(title, createTemplate);

       canvas.addTemplate(createTemplate, urx - 50, y);
   }
}
于 2015-01-08T16:18:07.387 に答える