You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity(C#)中如何实现Objects类owner变量动态切换Person/Company类型?

解决方案

方案1:使用接口(类型安全推荐)

定义统一的IOwner接口,让Person和Company实现该接口,这样Objects的owner可以用接口类型声明,既支持运行时切换类型,又能安全调用共同方法/属性。

步骤1:定义接口

public interface IOwner
{
    // 把Person和Company共有的需要访问的成员抽象到这里,比如inventory
    List<Objects> Inventory { get; }
    // 可添加其他共同方法,比如物品转移逻辑
    void AddItem(Objects item);
}

步骤2:修改Person和Company实现接口

public class Person : IOwner
{
    public List<Objects> inventory = new List<Objects>();
    
    // 实现接口的Inventory属性
    public List<Objects> Inventory => inventory;
    
    // 实现接口的AddItem方法
    public void AddItem(Objects item)
    {
        inventory.Add(item);
    }
    
    // 原有其他代码...
}

public class Company : IOwner
{
    public List<Objects> inventory = new List<Objects>();
    
    public List<Objects> Inventory => inventory;
    
    public void AddItem(Objects item)
    {
        inventory.Add(item);
    }
    
    // 原有其他代码...
}

步骤3:修改Objects类

public class Objects
{
    public IOwner owner;
    
    public void TransferOwner(IOwner newOwner)
    {
        // 从旧所有者的物品列表移除自身
        owner.Inventory.Remove(this);
        // 切换所有者
        owner = newOwner;
        // 添加到新所有者的物品列表
        owner.AddItem(this);
    }
    
    // 其他原有代码...
}

该方案完全支持多次类型切换(Person→Company→Person),编译时就能检查成员调用合法性,不会出现运行时意外错误,是最规范的实现方式。

方案2:使用dynamic类型(快速实现)

如果不想修改Person和Company的原有代码,直接用dynamic类型声明owner,它支持运行时任意切换类型,只要调用的成员在当前实例中存在即可。

修改Objects类

public class Objects
{
    public dynamic owner;
    
    public void SwitchOwner()
    {
        // 第一次赋值为Person
        owner = new Person();
        owner.inventory.Add(this);
        
        // 切换为Company
        owner = new Company();
        owner.inventory.Add(this);
        
        // 再切回Person,完全支持
        owner = new Person();
    }
    
    // 其他原有代码...
}

注意:dynamic会跳过编译时类型检查,如果调用了当前实例不存在的成员,运行时会抛出RuntimeBinderException,调试时需注意。但对于小型游戏场景,只要确保调用的成员在Person和Company中都存在,这个方案非常快捷。

方案对比

  • 优先选接口方案:类型安全、可维护性高,适合长期迭代的项目。
  • 若不想修改原有类,选dynamic方案:实现成本低,快速满足需求。

内容的提问来源于stack exchange,提问作者Florian Koszinowski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 19:25:17