在实例化时将Java转换为C#-重写
我很难将下面的代码从Java转换为C 我不确定是否可以在C#中重写实例化。如果没有,是否有方法复制代码以实现所需的功能 C#没有我们在Java中所知道的匿名类(它们不能扩展其他类或实现接口)。我建议您使用Lambda表达式,但因为您使用的是一个框架,所以这不是一个选项 假设您的起始Java代码如下所示,它将匿名内部类提取为命名类在实例化时将Java转换为C#-重写,java,c#,overriding,objectinstantiation,Java,C#,Overriding,Objectinstantiation,我很难将下面的代码从Java转换为C 我不确定是否可以在C#中重写实例化。如果没有,是否有方法复制代码以实现所需的功能 C#没有我们在Java中所知道的匿名类(它们不能扩展其他类或实现接口)。我建议您使用Lambda表达式,但因为您使用的是一个框架,所以这不是一个选项 假设您的起始Java代码如下所示,它将匿名内部类提取为命名类 public class ContextClass { public void ContextMethod() { this.documen
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);
}
}
这是一个匿名类;为什么不创建一个命名类并使用它呢?你不能在c#中匿名实现任何类,至少不是你想要的。您可以看看这个主题:那么我是否应该编写一个从
VerticalPositionMark
继承的新类对象,然后重写draw函数?@user3643344由于没有其他实现的基类,所以不会重写该方法。这将是一个新的实现,而不是重写。innerclass需要访问title
(对象正在初始化的同一函数调用中的字符串)和tocpocholder
的值draw()
是一个操作事件,当它被添加到文档中时会被调用。请参阅我的更改,为CustomVerticalPositionMark类添加了一个构造函数。旁注:C#确实有匿名类,只是它们的使用方式与Java不同。@ObliviousSage谢谢,我在回答中更正了这句话
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);
}
}