Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在实例化时将Java转换为C#-重写_Java_C#_Overriding_Objectinstantiation - Fatal编程技术网

在实例化时将Java转换为C#-重写

在实例化时将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

我很难将下面的代码从Java转换为C

我不确定是否可以在C#中重写实例化。如果没有,是否有方法复制代码以实现所需的功能

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

这是一个匿名类;为什么不创建一个命名类并使用它呢?你不能在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);
   }
}