gpt4 book ai didi

具有具体实现的 C# 泛型

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

是否可以在 C# 中创建通用方法并为给定类型添加具体实现?例如:

void Foo<T>(T value) { 
//add generic implementation
}
void Foo<int>(int value) {
//add implementation specific to int type
}

最佳答案

在您的具体示例中,您不需要这样做。相反,您只需实现一个非泛型重载,因为编译器会更喜欢使用它而不是泛型版本。编译时类型用于分派(dispatch)对象:

void Foo<T>(T value) 
{
}

void Foo(int value)
{
// Will get preferred by the compiler when doing Foo(42)
}

但是,在一般情况下,这并不总是有效。如果你混入继承或类似的东西,你可能会得到意想不到的结果。例如,如果您有一个实现了 IBarBar 类:

void Foo<T>(T value) {}
void Foo(Bar value) {}

你通过以下方式调用它:

IBar b = new Bar();
Foo(b); // Calls Foo<T>, since the type is IBar, not Bar

您可以通过动态调度解决这个问题:

public void Foo(dynamic value)
{
// Dynamically dispatches to the right overload
FooImpl(value);
}

private void FooImpl<T>(T value)
{
}
private void FooImpl(Bar value)
{
}

关于具有具体实现的 C# 泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37954826/

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