gpt4 book ai didi

c# - C# 是否支持 __call__ 方法?

转载 作者:太空狗 更新时间:2023-10-30 00:12:28 24 4
gpt4 key购买 nike

Python 有这种魔力 __call__当像函数一样调用对象时调用的方法。 C# 是否支持类似的东西?


具体来说,我希望有一种方法可以互换使用委托(delegate)和对象。尝试设计一个 API,用户可以在其中传递函数列表,但有时这些函数需要一些初始参数,在这种情况下,他们会改用其中一个可调用对象。

最佳答案

当然,如果您继承自 DynamicObject .我想你在寻找 TryInvoke它在 obj(...) 上执行,但是您可以覆盖其他几个方法来处理转换、索引访问 (obj[idx])、方法调用、属性调用等

using System;
using System.Diagnostics;
using System.Dynamic;
using System.Linq;
using System.Text;

namespace ConsoleApplication {
public static class ConsoleApp {
public static void Main() {
dynamic x = new MyDynamicObject();
var result = x("awe", "some");

Debug.Assert(result == "awesome");
}
}

public class MyDynamicObject : DynamicObject {
public override Boolean TryInvoke(InvokeBinder binder, Object[] args, out Object result) {
result = args.Aggregate(new StringBuilder(), (builder, item) => builder.Append(item), builder => builder.ToString());
return true;
}
}
}

关于c# - C# 是否支持 __call__ 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4858733/

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