gpt4 book ai didi

C# .net - 覆盖现有的内置函数 + 获取底层方法代码

转载 作者:行者123 更新时间:2023-11-30 12:15:57 25 4
gpt4 key购买 nike

抱歉,如果这些是非常基本的问题,但假设我正在使用 BlockingCollection 的 void Add(T item) 函数:

1) 我将如何重写 Add 函数,即如果我想在开头添加一个检查然后调用基本函数,是否可以这样做,如果可以,代码看起来像这样吗?

protected sealed class BlockingCollection<T> : IEnumerable<T>
{
protected override void Add(T item)
{
// do something here
// call base blockingcollection add function, something like return base.Add(item)??
}
}

2) 如果我不想调用基本函数,而是想实际修改 Add 代码,有没有办法获取 Add 函数的底层代码?我会使用反射之类的东西吗?如果是这样,有什么方法可以在不编写我自己的程序并使用反射来获取方法代码的情况下获取底层代码(即我可以在 Visual Studio IDE 本身中获取底层方法代码而不必编写/编译/运行代码吗?什么时候我想获取方法的底层代码?)?

最佳答案

IEnumerable 没有“添加”方法;你必须自己实现。然而,ICollection 确实如此!

另外,因为 IEnumerable/ICollection 是接口(interface),而不是类,所以没有现有的实现可供您覆盖。你必须自己做那部分。


编辑可能的额外 super 正确性:

如果您正在尝试子类化 BlockingCollection 并且您想在通过“添加”添加 T 之前做一些额外的“事情”,您可以这样做:

public class Foo<T> : BlockingCollection<T>
{
public new void Add(T item)
{
base.Add(item);
base.Add(item);
}
}

因此,这个极其简单的实现将通过两次“添加”将您放入 Foo 中的任何内容添加。

关于C# .net - 覆盖现有的内置函数 + 获取底层方法代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6259954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com