C#中的隐式类型转换

4

在理解C#中的类型转换时出现了一些问题。我创建了一个简单的类,并重载了其中的ToString()方法,以便将类对象字段的值输出为字符串:

public class Triple{

public int Int32;
public string String;
public bool Boolean;

public Triple(int Int32, string String, bool Boolean)
{
    this.Int32 = Int32;
    this.String = String;
    this.Boolean = Boolean;

}
 public override string ToString()
{
    return String.Format("{0},{1},{2}", this.Int32, this.String, this.Boolean);
}

我也设置了将 Triple 类的对象隐式转换为 bool 类型:
 public static implicit operator bool(Triple T1)
    {

        if (T1.Boolean)
        {
            return true;
        }

        else
        {
            return false;
        }
    }

现在当我调用:
Triple t1 = new Triple(1, "abcd", true);
Console.WriteLine(t1);

Triple类的布尔字段显示为输出,而不是类字段的值。
为什么会这样?

2
旁注:公共字段几乎总是错误的。老实说,这看起来应该是一个具有只读属性的“readonly struct”。 - Marc Gravell
2个回答

6

有许多 Console.WriteLine 的重载方法接受 boolobject 参数(等等)。编译器更喜欢使用 bool因为你拥有一个隐式转换运算符。你可以添加一个 (object).ToString(),但老实说,我可能会放弃这个运算符 - 不确定它是否对你有帮助。


0
嗯,这是因为您添加了一个隐式操作符。implicit关键字提供了转换功能。隐式转换涉及从一种类型到另一种类型的强制转换。
使用implicit关键字,您可以将转换功能实现为运算符重载的运算符方法。
链接:请参阅此MS文档以获取更多解释

你指的是隐式吗? - bolkay
(如果它是“显式的”,那么在这里就可以了;我认为你的意思是“隐式的”) - Marc Gravell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接