C#向类的实例添加扩展方法
本文关键字:添加 扩展 方法 实例 | 更新日期: 2023-09-27 18:22:25
我基本上想为ArrayList的每个副本注入一个扩展方法,它将执行以下行为:
ArrayList ourList = new ArrayList();
ourList.Add(randomarray or random arraylist);
它会将给定数组、arraylist或堆栈的CONTENT添加到"ourList",而不是数组、arrayist或堆栈本身。
然而,我的问题是:
如何将扩展方法ONLY注入到实例化类中?以下代码将该方法添加到ArrayList基类和任何实例化副本中,但我希望它仅在访问该类的实例化副本时可用。
public static void Add(this ArrayList ourlist){
}
ArrayList.Add(); // Works, but shouldn't
ArrayList result = new ArrayList();
result.Add(); // Works
那么,我该如何处理呢?
如何将扩展方法ONLY注入到实例化类中?
如果您正在讨论向单个实例添加扩展方法,则不能。C#中没有这样的概念。扩展方法"扩展"类型,而不是该类型的单个实例。如果编译器只有在执行时才知道哪些实例在编译时应用了扩展,您怎么会期望它知道呢?
如果你谈论的是像任何其他静态方法一样调用扩展方法,那么总是是可行的,并且是无法阻止的。所以你可以随时拨打:
MyExtensionClass.Add(null, null);
如果您不是在谈论这两件事中的任何一件,那么您的意思还不清楚,但如示例代码中所示,对ArrayList.Add
进行静态调用确实不会编译。您确定没有名为ArrayList
的变量吗?(那肯定会把事情搞砸。)
此外,由于ArrayList
已经有了Add(object)
实例方法,所以无论如何都不会使用新的扩展方法。(你真的应该尽快离开非泛型集合。)