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 中所知道的匿名类(它们不能扩展其他类或实现接口)。我建议您使用 Lambda 表达式,但由于您使用的框架不是一个选项。

考虑如下所示的起始 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 回答