On Wednesday, 8 November 2017 at 18:33:15 UTC, Steven
Schveighoffer wrote:
On 11/8/17 12:38 PM, Timoses wrote:
Hey,
wrapping my head around this atm..
[snip]
so what you want is a static variable per subclass, but that
the base class can access.
What I would recommend is this:
abstract class Base
{
int x();
}
class A : Base
{
private static int _x = 1;
int x() { return _x; }
}
class B : Base
{
private static int _x = 2;
int x() { return _x; }
}
Note that this doesn't do *everything* a static variable can,
since x() requires an instance (i.e. you can't do A.x). But the
actual variable itself is static since the backing is static.
This is the only way to provide access of x to the Base that I
can think of.
-Steve
I suppose this is what Adam suggested, correct?
This is a more general question: Why is it not possible to
implement/override static methods?
interface I // or abstract class I
{
static int fun();
}
class A : I
{
static int fun() { return 3; }
}
void main()
{
I i = new A();
i.fun(); // <--- linker error
}
or replacing interface with an abstract base class.
Static overriding would be quite interesting in terms of
compile-time handling of objects.