写点什么

C#和 TS 的范型实例化

发布于: 2020 年 06 月 05 日

Date Created: Jun 05, 2020 3:00 PM

场景分析

假设我们有一个需要生成游戏卡片的场景,不同的玩法具有不同类型的卡片,那么我们的卡片工厂类应当如何实现


静态-C#

using System;					public class Program{	interface ICard  {      void Generate();  }
class CardGenerator { public TCard Create<TCard>() where TCard: ICard, new() { return new TCard(); } } class BasicCard: ICard { public void Generate() { Console.WriteLine("Generate"); } } public static void Main() { Console.WriteLine("Hello World"); var cg = new CardGenerator(); var c = cg.Create<BasicCard>(); c.Generate(); }}
复制代码


动态语言 - TS

由于 TS 最终会编译为 JS 这样的动态语言执行,在编译生成的 JS 代码中必然会丢失类型信息,所以必须以参数的形式提供类信息


interface ICard {    generate(): void;}
class CardGenerator { public create<TCard extends ICard>(cardType: (new() => TCard)): TCard { return new cardType(); }}
class BasicCard implements ICard { public generate(): void { console.debug("Generate"); }}
const cg = new CardGenerator();const c = cg.create(BasicCard);c.generate();
复制代码


发布于: 2020 年 06 月 05 日阅读数: 71
用户头像

还未添加个人签名 2018.05.21 加入

还未添加个人简介

评论

发布
暂无评论
C#和TS的范型实例化