c# - 实例化扩展方法? C#

标签 c# extension-methods

所以我想为 API 以其他方式密封的类型创建一个扩展方法。

如果您了解扩展方法,以下内容应该看起来很熟悉。

private static List<Member> memberList = new List<Member>();

public static List<Member> GetMemberList(this GameObject go)
{
    return memberList;
}

请注意,要声明扩展方法,它需要是静态的,并且因为它需要是静态的,所以我通过 GameObject 类型访问的 List 必须是静态的。 我希望每个 GameObject 都有自己的成员列表。但是我很确定,因为这是一个静态字段,每个实例化的游戏对象都将指向同一个静态成员列表。

那么我的假设会是真的吗?如果是这样,什么可能是替代方案?我想避免将 GameObject 放在也包含 memberList 的包装类中,因为 api 只允许在运行时检测和操作 GameObjects。有一些方法可以通过 gameObject 反向引用包装类,但这会增加我想避免的代码的复杂性。

最佳答案

是的,如果你想在游戏对象之外保留一些东西并通过扩展方法访问它,它必须是静态的。

您可以使用字典将一个成员列表映射到每个游戏对象:

private static Dictionary<GameObject, List<Member>> memberLists = new Dictionary<GameObject, List<Member>>();

public static List<Member> GetMemberList(this GameObject go) {
  return memberLists[go];
}

关于c# - 实例化扩展方法? C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12151241/

相关文章:

c# - 防止 FlowLayoutPanel 滚动到更新的控件

C# - 检测人脸和裁剪图像

c# - 扩展方法和类型推断

c# - C#4 中的动态关键字是否支持扩展方法?

Silverlight 中的 .Net 框架版本 : no List<T>. 查找方法?

c# - 虚拟导航属性和 Multi-Tenancy

C# 'invert' 日期时间列表

c# - 如何模拟 IConfiguration.GetValue

c# - 将字符串转换为可空类型(int、double 等...)

c# - 太多的扩展方法会降低性能吗?怎么运行的