引用与回调(提供程序/工厂)

Reference vs. Callback (provider/factory)

提问人:Vesa95 提问时间:3/18/2023 更新时间:3/18/2023 访问量:19

问:

我试着理解一些概念,但我不能自己做,所以伙计们,我需要你们的帮助。 我试图理解引用和回调有什么区别,可能这个术语不是完美的术语,我试着理解这段代码:

使用类 A 中的方法和类 B 中的方法初始化成员变量有什么区别?

    class A
    {
        private BlockingCollection<int> _collectionA;

        public void SetA(ref BlockingCollection<int> collectionA)
        {
            _collectionA = collectionA;
        }
    }

    class B
    {
        private BlockingCollection<int> _collectionB;

        public void SetB(Func<BlockingCollection<int>> collectionBProvider)
        {
            _collectionB = collectionBProvider();
        }
    }

static void Main(string[] args)
{
            BlockingCollection<int> bCollection = new BlockingCollection<int>(boundedCapacity: 20);

            A a = new A();
            a.SetA(ref bCollection);

            B b = new B();
            b.SetB(() => bCollection);
}
C# 回调 参考

评论


答:

0赞 Vesa95 3/18/2023 #1

我发现,SetA 和 SetB 方法都可用于访问和修改作为参数传入的初始列表,无论它是通过引用传递还是使用回调传递。

在 SetA 的情况下,列表是使用 ref 关键字通过引用传递的,因此对方法中的列表所做的任何修改都将反映在传入的原始列表中。

对于 SetB,列表是使用返回初始列表的回调获取的,因此从回调中获取的对列表所做的任何修改也将反映在原始列表中。

因此,这两种方法都允许您访问和修改初始列表,但它们使用不同的机制来执行此操作。