digitalmars.D.learn - Override property
- Aldo (48/48) May 10 2017 Hello,
- Adam D. Ruppe (11/22) May 10 2017 Yes, that's normal. If you override one function in a child
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
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.
May 10 2017








Adam D. Ruppe <destructionator gmail.com>