C#将扩展方法添加到类的实例中?

Jan*_*old -1 c# extension-methods member instances

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

ArrayList ourList = new ArrayList();
ourList.Add(randomarray or random arraylist);
Run Code Online (Sandbox Code Playgroud)

它将给定数组,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
Run Code Online (Sandbox Code Playgroud)

那么,我该如何管理呢?

Jon*_*eet 10

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

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

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

MyExtensionClass.Add(null, null);
Run Code Online (Sandbox Code Playgroud)

如果你不是在谈论这些事情中的任何一个,那么你的意思并不清楚 - 但是如你的示例代码中所示进行静态调用ArrayList.Add实际上无法编译.你确定你没有调用变量ArrayList吗?(那肯定会搞砸了.)

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