为了账号安全,请及时绑定邮箱和手机立即绑定

动态扩展一个返回新创建的类的类

动态扩展一个返回新创建的类的类

C#
四季花海 2021-06-27 11:01:59
我不确定标题问题是否正是需要做的,但我会解释。我有两个类 Tile 和 extendTile。我希望扩展Tile在不同的类名下创建一个新的Tile实例可以这么说。例子:extendTile surfaceTile = new extendTile(Tile, {Layer: 1, Type: 0});extTile grassTile = new surfaceTile("Grass");extTile fireTile = new surfaceTile("Grass", {Damage: 0});这是我拥有的代码,它完全符合我在 javascript 中的需求。function extendTile(Type, obj){var newClass = function Tile(name, obj){  this.name = name;  console.log(name);  if (obj) for (var key in obj){    if(obj.hasOwnProperty(key)){      this[key] = obj[key];    }  }}var proto = new Type;for (var key in obj){  if (obj.hasOwnProperty(key))  {    proto[key] = obj[key];  }}newClass.prototype = proto;return newClass;}var newTile = new extendTile(function() {}, {});var SurfaceTile = new extendTile(newTile, {Layer: 0, Type: 0});var extSurfaceTile = new extendTile(SurfaceTile, {Damage: 5}); //Will inherit the layer and type from SurfaceTile and extend it with Damage as wellvar nameTheTile = new extSurfaceTile("fire");这是一个 Tilemap 编辑器,我想专门为我正在制作的游戏创建。我希望能够扩展像上面这样的对象的原因是,它们可以被修改以及制作的插件等等。扩展一个类并动态创建它会更容易,而不是从头开始创建整个类(原型继承)。我想我真的以错误的方式考虑这个问题,应该用另一种方法来考虑,但我不太确定在这种情况下哪种方法最好。我知道我需要扩展一个基类。
查看完整描述

1 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

您应该有一个包含您想要的潜在修饰符的基本 tile 类。提供任意属性对您来说并不是真正有用,因为如果您指的是通用磁贴,那么您将无法知道这些任意属性将是什么,因此您无法以任何有意义的方式使用它们。


与其只提供静态数字,您可能还想让它更动态一些,允许消费者配置如何应用这些属性。像这样的东西:


interface ITileDamage

{

    int ApplyDamage(Tile t);

}


public class Tile

{

    int Layer { get; set; }

    ITileDamage Damage { get; set; }

}


查看完整回答
反对 回复 2021-07-03
  • 1 回答
  • 0 关注
  • 116 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信