【问题标题】:Is there a way to encode structural polymorphism in language nominal polymorphism type system?有没有办法在语言名义多态类型系统中编码结构多态?
【发布时间】:2022-11-01 22:53:33
【问题描述】:

有没有办法用 C# 之类的语言在 TypeScript 中编码像 extends 这样的结构多态性?

参考可能与此有关:

编码应该像Encoding HKT in TypeScript

ECS 查询可以被认为是一个限制版本,它只支持字段限制为非结构原始类型的结构,键按类型编码,值类型是组件类型。

【问题讨论】:

  • 通过从另一个类派生? class Animal {}class Dog : Animal {}?
  • 我不清楚“结构多态性”是什么意思。据我所知,extends 只是 typescript 的继承方式,c# 和大多数其他面向对象的语言都支持这一点。
  • 我不记得 TypeScript extends 能够“编码结构多态性”。也许是因为我不知道该术语的含义,但如果您可以链接到该术语的引用,那就太好了。

标签: c# typescript types polymorphism


【解决方案1】:

您可能想从基类派生,例如:

class Animal {
    public virtual void MakeSound()
    {
        Console.WriteLine("Animal doesn't know how to make a sound.");
    }
}

class Dog : Animal {
    public override void MakeSound()
    {
        Console.WriteLine("Woof!");
    }
}

class Cat : Animal {
    public override void MakeSound()
    {
        Console.WriteLine("Meow!");
    }
}

List<Animal> animals = new();
animals.Add(new Dog());
animals.Add(new Cat());

foreach (var animal in animals) {
    Console.WriteLine(animal.MakeSound());
}

哪个应该打印Woof!,然后是Meow!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 2021-01-19
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多