将Java构造函数从抽象类和超级关键字转换为C#时出错?

时间:2017-02-02 12:08:08

标签: java c# constructor

我有两个Java类,我试图转换为C#。一个是名为RemoteButton的抽象类,另一个是从TVRemoteMute派生的。我能够转换抽象RemoteButton类中的大多数成员。一个成员是抽象的buttonNinePressed(),在TVRemoteMute中实现,另一个是在基类中实现的虚拟成员buttonFivePressed()。我的问题是TVRemoteMute类的构造函数。它突出显示了两个单词,构造函数名称和方法中的单词super。构造函数名称错误读取,"没有给出对应于所需的正式参数的参数" newDevice' ' RemoteButton.RemoteButton(EntertainmentDevice)'。 "超级"关键字错误读取该名称在当前上下文中不存在。我如何从Java到C#实现这个构造函数,所以我的类可以处理构造函数?

public abstract class RemoteButton
{
    private EntertainmentDevice theDevice;

    public RemoteButton(EntertainmentDevice newDevice)
    {
        theDevice = newDevice;
    }

    public virtual void buttonFivePressed()
    {
        theDevice.buttonFivePressed();
    }

    public abstract void buttonNinePressed();

 }

public class TVRemoteMute : RemoteButton
{
    public TVRemoteMute(EntertainmentDevice newDevice)
    {
        super(newDevice);
    }

    public override void buttonNinePressed()
    {

        Console.WriteLine("TV was Muted");

    }
}

1 个答案:

答案 0 :(得分:5)

关键字super未在C#中使用;调用基类的构造函数与Java不同。

TVRemoteMute中的构造函数更改为:

public TVRemoteMute(EntertainmentDevice newDevice) : base(newDevice)
{

}

实际上,如果你在构造函数体中没有做任何其他事情,我更喜欢这个,但它确实没关系:

public TVRemoteMute(EntertainmentDevice newDevice) : base(newDevice) { }

编译后,另一个错误应该自行解决。