gpt4 book ai didi

c# - 接口(interface)、泛型和隐式操作

转载 作者:行者123 更新时间:2023-11-30 18:22:39 24 4
gpt4 key购买 nike

假设我有这些类型:

public class Foo<T>
{
public Foo(T value)
{
Value = value;
}

public T Value {get;set;}

public static implicit operator Foo<T>(T t)
{
return new Foo<T>(t);
}
}

public interface IBar
{
}

public class Bar : IBar
{
}

为什么不允许我写这个?

Foo<IBar> foo = (IBar)new Bar();

但还是允许写这个?

Foo<Bar> foo = new Bar();

我收到这个错误:

Cannot implicitly convert type IBar to Foo< IBar >. An explicit conversion exists (are you missing a cast?)

我知道我不能对接口(interface)使用隐式运算符,但为什么当接口(interface)是通用参数时我不能使用它们?

最佳答案

如果您删除通用参数并且只有 operator Foo(IBar t),它会引发 CS0552 .

You cannot create a user-defined conversion to or from an interface. If you need the conversion routine, resolve this error by making the interface a class or derive a class from the interface.

因此不允许用户定义接口(interface)之间的转换。这与您遇到的第一个错误有关:

Cannot implicitly convert type IBar to Foo< IBar >. An explicit conversion exists (are you missing a cast?)

如果已经存在显式转换(现在从 IBarFoo),则不可能存在隐式转换。

因此您不能重载来自或指向接口(interface)的用户定义转换,因为已经为该类型定义了一个内置转换(尽管是显式转换)。

关于c# - 接口(interface)、泛型和隐式操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33754309/

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