【问题标题】:Converting Java to C# - Override on Instantiation将 Java 转换为 C# - 覆盖实例化
【发布时间】:2015-01-09 00:47:05
【问题描述】:

我在将以下代码从 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# 中匿名实现任何类,至少不是您想要的。你可以看看这个话题:stackoverflow.com/questions/24931211/…
  • 那我是不是应该写一个继承自VerticalPositionMark的新类对象,然后重写draw函数呢?
  • @user3643344 不会覆盖该方法,因为没有具有另一个实现的基类。这将是一个新的实现,而不是一个覆盖。

标签: java c# overriding objectinstantiation


【解决方案1】:

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

【讨论】:

  • 内部类需要访问title(正在初始化对象的同一函数调用中的字符串)和tocPlaceholder的值。 draw() 是一个在添加到文档时调用的操作事件。
  • 查看我的更改,将构造函数添加到 CustomVerticalPositionMark 类。
  • 旁注:C#确实有匿名类,只是它们的使用方式与 Java 不同。
  • @ObliviousSage 谢谢,我在回答中更正了该声明
猜你喜欢
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-11
  • 1970-01-01
相关资源
最近更新 更多