gpt4 book ai didi

c# - 如何解决 C# 中的 N 级多态性?

转载 作者:太空宇宙 更新时间:2023-11-03 19:46:00 24 4
gpt4 key购买 nike

假设有一个恒等函数,即:

T Id<T>(T t) { return t; }

我应该输入什么 F

void F<T>(Func<T, T> f) { // This is not sound!
System.Console.WriteLine("{0}", f(1));
System.Console.WriteLine("{0}", f("one"));
}

static void Main() {
F(Id);
}

我认为 C# 不具有 N 阶多态性,并且 C# 无法正常键入 F。这样对吗?

然后如何解决这些问题?

最佳答案

我不清楚你想要实现什么,但你可以使用包含泛型方法的非泛型接口(interface)来做到这一点:

using System;

interface IGenericSameTypeFunction
{
T Apply<T>(T input);
}

public class SimpleIdentityFunction : IGenericSameTypeFunction
{
public T Apply<T>(T input) => input;
}

class Test
{
static void F(IGenericSameTypeFunction function)
{
Console.WriteLine(function.Apply(1));
Console.WriteLine(function.Apply("one"));
}

static void Main()
{
F(new SimpleIdentityFunction());
}
}

重要的方面是通过使 Apply 方法成为通用方法而不是 F 方法,你说“这是一个可以应用于类型的函数- 任何类型的安全方法。”

虽然没有办法将该接口(interface)表示为委托(delegate)类型。

关于c# - 如何解决 C# 中的 N 级多态性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45530124/

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