May 10, 2017 Override @property | ||||
|---|---|---|---|---|
| ||||
Hello,
can you tell me if this compilation error is normal ?
class Texture
{
public this()
{
}
}
class Control
{
private Texture m_texture;
@property
{
public Texture texture()
{
return this.m_texture;
}
public void texture(Texture value)
{
this.m_texture = value;
}
}
}
class PictureBox : Control
{
@property
public override void texture(Texture value)
{
writeln("override");
this.m_texture = value;
}
}
import std.stdio;
void main()
{
auto picture = new PictureBox();
writeln(picture.texture is null);
}
Error: function f340.PictureBox.texture (Texture value) is not callable using argument types ()
Complete code : https://dpaste.dzfl.pl/aa7bf25548e8
I can't use property getter if I override the setter property.
| ||||
May 10, 2017 Re: Override @property | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Aldo | On Wednesday, 10 May 2017 at 16:40:09 UTC, Aldo wrote: > class PictureBox : Control > { > @property > public override void texture(Texture value) > { > writeln("override"); > this.m_texture = value; > } > } > > Error: function f340.PictureBox.texture (Texture value) is not callable using argument types () Yes, that's normal. If you override one function in a child class, you need to explicitly bring in the other overrides by adding alias texture = Control.texture; // I think you can also use `super.texture` in the class with the new override. That tells it to look up the name from the parent as well. The rationale is here: http://dlang.org/hijack.html It isn't just properties btw, any case of overloads is subject to the same rule. | |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply