【发布时间】:2012-08-28 08:40:51
【问题描述】:
所以我想为 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 只允许在运行时检测和操作 GameObject。有一些方法可以通过 gameObject 反向引用包装类,但这会增加我想要避免的代码的复杂性。
【问题讨论】:
-
您将在
GameObject实例上调用GetMemberList,它将返回该实例的列表。我不认为我看到了问题。 (扩展方法是静态的,必须声明为静态类型,但“扩展”this参数是一个实例。) -
这是我的问题,如果这会发生。我也刚刚从另一个网站上读到这个“扩展方法是一种特殊的静态方法,但它们被称为扩展类型的实例方法。”但是静态成员列表呢?它是从扩展方法访问的静态字段。
-
@DanJ:问题是成员列表不是游戏对象的一部分。
-
扩展方法并没有什么特别之处,除了它们可以被视为你正在扩展的类上的方法。它们仍然是普通的旧静态方法,它们接触的任何静态方法仍然是全局的。
-
@Guffa 啊,我误会了。我读到“我希望每个游戏对象都有自己的成员列表”,然后忽略了静态
memberList的存在。
标签: c# extension-methods