将 Java 转换为 C# - 在实例化时覆盖

Converting Java to C# - Override on Instantiation

我在将以下代码从 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# 中重写实例化。如果没有,是否有办法复制代码来实现所需的功能?

C# 没有我们在 Java 中知道的匿名 classes(它们不能扩展其他 classes 或实现接口)。我建议您使用 Lambda 表达式,但由于您使用的框架不是一个选项。

考虑您的起始 Java 代码如下,它将匿名内部 class 提取到命名的 class.

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);
   }
}