我基本上想为每个ArrayList副本注入一个扩展方法,它会执行以下行为:
ArrayList ourList = new ArrayList();
ourList.Add(randomarray or random arraylist);
它将给定数组,arraylist或stack的CONTENT添加到'ourList'而不是数组,arraylist或stack本身。
但是,我的问题是:
如何仅将扩展方法注入到实例类中? 下面的代码将该方法添加到ArrayList基类和任何实例化副本,但是我希望它在访问类的实例副本时才可用。
public static void Add(this ArrayList ourlist){
}
ArrayList.Add(); // Works, but shouldn't
ArrayList result = new ArrayList();
result.Add(); // Works
那么,我该如何管理呢?
答案 0 :(得分:10)
如何仅将扩展方法注入实例类?
如果您正在谈论为个别实例添加扩展方法,则不能。 C#中没有这样的概念。扩展方法“扩展”类型,而不是类型的单个实例。如果知识只在执行时可用,那么您希望编译器知道哪些实例在编译时应用了扩展名?
如果您正在讨论像任何其他静态方法一样调用扩展方法,总是是可行的,并且无法阻止。所以你总是可以打电话:
MyExtensionClass.Add(null, null);
如果你没有谈论这两件事,那就不清楚你的意思了 - 但是如你的示例代码所示,对ArrayList.Add
进行静态调用真的不会编译。您确定没有名为ArrayList
的变量吗? (那肯定会搞砸了。)
此外,由于ArrayList
已经有Add(object)
实例方法,因此无论如何都不会使用新的扩展方法。 (你应该尽可能快地远离非泛型集合。)