• StrikeForceZero@programming.dev
      link
      fedilink
      arrow-up
      1
      ·
      edit-2
      1 年前

      Yeah Interfaces would be the next best thing.

      The only reason why traits are considered better is because in languages like rust it can enable static dispatch. Whereas interfaces in C#, Java, Typescript, (and C++ via abstract classes, not templates) are always dynamic dispatch.

      • Boomkop3@reddthat.com
        link
        fedilink
        arrow-up
        1
        ·
        edit-2
        1 年前

        Looking at the Rust docs, it looks like it’s not much more than a difference in implementation under the hood.

        It would be clunky, but in C# you could duct tape this: make a static abstract method in an interface that takes an object named ‘self’, then an extension method that extends the class and just casts then runs the function with Unsafe.As<TFrom, TTo>(ref obj), or an explicitly aligned struct with overlapping values.

        I don’t expect any such implementation anytime soon though :/

        ps: Typescript can go take a hike, it’s a superset for a language that was never designed for this