On Sunday, 9 August 2020 at 15:56:31 UTC, Ali Çehreli wrote:
module deneme;

import std.stdio;

interface I {
  void methodName();
}
...
I getClassById(uint id)
{
    if (id == 0) {
        return cast(A)Object.factory("deneme.A");
    } else if(id == 1) {
        return cast(B)Object.factory("deneme.B");
    } else {
        return cast(C)Object.factory("deneme.C");
    }
}

void main() {
  auto o = getClassById(1);
  o.methodName();
}

Why not simply do?
I getClassById(uint id)
{
   if (id == 0) {
       return new A();
   } else if(id == 1) {
       return new B();
   } else {
       return new C();
   }
}

Then you can also pass parameters to the constructors or call further factories to create them, as long as they return a `I`-compatible type.

Reply via email to