-1

我基本上想为 ArrayList 的每个副本注入一个扩展方法,这将执行以下行为:

ArrayList ourList = new ArrayList();
ourList.Add(randomarray or random arraylist);

它将给定数组、数组列表或堆栈的内容添加到“ourList”,而不是数组、数组列表或堆栈本身。

但是,我的问题是:

如何仅将扩展方法注入实例类?以下代码将该方法添加到 ArrayList 基类和任何实例副本,但是我希望它仅在您访问该类的实例副本时可用。

    public static void Add(this ArrayList ourlist){

    }

    ArrayList.Add(); // Works, but shouldn't
    ArrayList result = new ArrayList();
    result.Add(); // Works

那么,我该如何管理呢?

4

1 回答 1

10

如何仅将扩展方法注入实例类?

如果您正在谈论向单个实例添加扩展方法,则不能。C# 中没有这样的概念。扩展方法“扩展”类型,而不是类型的单个实例。如果该知识仅在执行时可用,您如何期望编译器知道哪些实例在编译时应用了扩展?

如果您正在谈论像任何其他静态方法一样调用扩展方法,那将始终是可行的,并且无法阻止。所以你总是可以打电话:

MyExtensionClass.Add(null, null);

如果您不是在谈论这些事情中的任何一个,那么您的意思就不清楚了——但是像示例代码中所示的那样进行静态调用ArrayList.Add确实不会编译。你确定你没有一个名为的变量ArrayList吗?(那肯定会把事情搞砸。)

此外,由于ArrayList已经有一个Add(object)实例方法,因此无论如何都不会使用您的新扩展方法。(你真的应该尽快离开非泛型集合。)

于 2013-07-15T13:05:23.010 回答