gpt4 book ai didi

c# - 为什么不能同时定义隐式和显式运算符?

转载 作者:IT王子 更新时间:2023-10-29 04:09:17 26 4
gpt4 key购买 nike

为什么我不能像这样同时定义隐式和显式运算符?

    public class C
{
public static implicit operator string(C c)
{
return "implicit";
}

public static explicit operator string(C c)
{
return "explicit";
}
}

不过你可以做这个 hack :)

    class Program
{
public class A
{

}

public class B
{
public static implicit operator A(B b)
{
Console.WriteLine("implicit");
return new A();
}
}

public class C : B
{
public static explicit operator A(C c)
{
Console.WriteLine("explicit");
return new A();
}
}

static void Main(string[] args)
{
C c = new C();

A a = c;
A b = (A) c;
}
}

这打印:

implicit
explicit

最佳答案

检查这个:Why can't coexist implicit and explicit operator of the same type in C#?

如果你定义一个明确的运算符,你将能够做这样的事情:

Thing thing = (Thing)"value";

如果你定义了一个隐式运算符,你仍然可以做上面的事情,但是你也可以利用隐式转换:

Thing thing = "value";

简而言之,explicit 只允许显式转换,而 implicit 允许显式和隐式转换...因此只能定义一个。

关于c# - 为什么不能同时定义隐式和显式运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/762246/

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