On Thursday, 10 October 2019 at 16:33:47 UTC, H. S. Teoh wrote:
On Thu, Oct 10, 2019 at 03:58:02PM +0000, jmh530 via
Digitalmars-d-learn wrote:
On Thursday, 10 October 2019 at 15:47:58 UTC, Just Dave wrote:
> In C# you can do something like:
>
>
> if (obj is Person)
> {
> var person = obj as Person;
> // do stuff with person...
> }
[...]
You mean something like below:
class Person {
int id;
this(int x) {
id = x;
}
}
void main() {
auto joe = new Person(1);
if (is(typeof(joe) == Person)) {
assert(joe.id == 1);
}
}
Unfortunately, typeof is a compile-time construct, so this will
not work if you're receiving a Person object via a base class
reference. The correct solution is to cast the base class to
the derived type, which will yield null if it's not an instance
of the derived type.
T
Ah, you mean something like below:
class Person {
int id;
this(int x) {
id = x;
}
}
class Employee : Person {
int job_id;
this(int x, int y) {
super(x);
job_id = y;
}
}
void main() {
import std.stdio : writeln;
Person joe = new Employee(1, 2);
if (is(typeof(joe) == Employee)) {
writeln("here"); //not called in this case
}
}