【问题标题】:Overriding methods in valavala 中的覆盖方法
【发布时间】:2014-10-31 10:20:09
【问题描述】:

作为一个实验,我正在像这样在 vala 中扩展 Gtk.HeaderBar 类,以便有一个 Button 而不是标题/副标题标签:

using Gtk;

public class WebBrowserHeaderBar : HeaderBar {

    private Button title_widget;

    public WebBrowserHeaderBar(){
        this.show_close_button = true;

        title_widget = new Button.with_label("title");

        this.set_custom_title(title_widget);
    }

    public void set_title(string title){
        title_widget.label = title;
    }

}

然后我就这样使用它:

public class MainWindow: Window {

    private WebBrowserHeaderBar header;

    public MainWindow() {
        //this.title = MyWeb.APP_TITLE;

        this.window_position = WindowPosition.CENTER;
        this.destroy.connect (Gtk.main_quit);
        set_default_size (300, 200);

        header = new WebBrowserHeaderBar();
        header.set_title (MyWeb.APP_TITLE);
        this.set_titlebar(header);
    }

}

这可行,但是我在编译时收到以下警告:

WebBrowserHeaderBar.vala:15.2-15.22: warning: WebBrowserHeaderBar.set_title hides inherited method `Gtk.HeaderBar.set_title'. Use the `new' keyword if hiding was intentional
    public void set_title(string title){
    ^^^^^^^^^^^^^^^^^^^^^
Compilation succeeded - 1 warning(s)

如果我像 public override void set_title(string title){ 这样更改我的方法,它将无法编译:

WebBrowserHeaderBar.vala:15.2-15.31: error: WebBrowserHeaderBar.set_title: no suitable method found to override
    public override void set_title(string title){
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Compilation failed: 1 error(s), 0 warning(s)

为什么我会得到这个?如何摆脱警告和/或成功覆盖 set_title 方法?

【问题讨论】:

    标签: gtk3 vala


    【解决方案1】:

    您只能覆盖abstractvirtual 的方法。其他方法不能被覆盖,但您可以使用new 关键字隐藏它们:

    public new void set_title (string title) {
         title_widget.label = title;
    }
    

    如果引用的类型是WebBrowserHeaderBar,或者它的一个孩子,这个方法将被调用。如果引用的类型为 HeaderBar 或其超类之一,则将使用原始的 set_title

    这是一个有点像龙的功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      • 2011-09-15
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      相关资源
      最近更新 更多