how to make new C return other static type than C
Ali Çehreli
acehreli at yahoo.com
Sun Dec 9 10:29:30 PST 2012
On 12/09/2012 10:23 AM, deed wrote:
> interface I
> {
> void setX(int x);
> int getX();
> }
>
> class C : I
> {
> int x, y;
>
> void setX(int x) { this.x = x; }
> int getX() { return x; }
> void setY(int y) { this.y = y }
> int getY() { return y; }
> }
>
>
> void main()
> {
> auto obj = new C; // Want new C to instantiate obj with static type I.
> obj.setX(3); // Ok, sets x to 3.
> obj.getY(); // Error, not specified in the interface.
> }
new always returns an object of the actual type the programmer
requested. It is up to the programmer what interface the object needs to
be used with:
C obj = new C;
Now the code works because getY() is being called on a C, which does
have the definition of that function.
> - Is it possible to enforce, from within the class, a certain static
> interface type or ancestor type when instantiating with new? If so, how
> is it done?
Not possible.
> - Also, is it possible for a class to implement multiple interfaces and
> choose static type among them when instantiated, based on static class
> state or arguments passed to the constructor?
Again, it is always the same type of object. That object can be used by
its many interfaces.
Ali
More information about the Digitalmars-d-learn
mailing list