重载true和false运算符有什么作用?

3
我只是一个C#初学者,但我正在努力学习所有知识。然而,我卡在了重载 true 和 false 上;这是什么意思?请尽量用最基本的语言回答(以便13岁的孩子也能理解逻辑)。 如果可能的话,请解释一下如果坐标变成其他内容(例如:(3,5)),会有什么结果。
这里有预先编写好的代码: (请解释更改坐标后不同的输出) 信息: - 程序是控制台应用程序 - C# 我创建了一个名为Coord(代表坐标)的类。 类内部:
class Coord
{
    private int _x, _y;

    public Coord(int x, int y)
    {
        _x = x; 
        _y = y;
    }

    public int x
    {
        get 
        { 
            return _x; 
        }
        set 
        { 
            _x = value; 
        }
    }

    public int y
    {
        get 
        { 
            return _y; 
        }
        set 
        { 
            _y = value; 
        }
    }

    public static bool operator true(Coord coord1)
    {
        if (coord1.x != 0 || coord1.y != 0)
        { 
            return true; 
        }
        else
        { 
            return false; 
        }
    }

    public static bool operator false(Coord coord1)
    {
        if (coord1.x == 0 && coord1.y == 0)
        { 
            return true; 
        }
        else
        { 
            return false; 
        }
    }
}

在主类Program内部:
class Program
{
    static void Main(string[] args)
    {
        Coord coord = new Coord(0, 0);

        if (coord)
        {
            Console.WriteLine("True");
        }
        else
        {
            Console.WriteLine("False");
        }

        Console.ReadLine();
    }
}

2
你好,欢迎来到StackOverflow!通过逐行调试自己的代码可以帮助你理解程序正在做什么。 - John Odom
2
这是C#版本1的设计错误,因为它还没有可空类型而受到启发。已经做过的事情无法撤销,但你肯定可以停止使用它。一个名为IsEmpty的属性将是一个明智的选择。或者只需使用.NET类型之一,而不是编写自己的类型。或使其可为空。 - Hans Passant
2
https://msdn.microsoft.com/en-us/library/6x6y6z4d.aspx - Hans Passant
1
@HansPassant:有趣。我从未审查过那份文档。如果我这样做了,我会对所提议的DBNull类型使用true和false运算符进行彻底的批评。 - Eric Lippert
1
特别是:我们期望 if(X() && Y()) Z();if(X()) if (Y()) Z(); 具有相同的语义,但对于给定的类型,它们并不相同!前者在 X() 为“null”时评估 Y(),但后者不会。 (幸运的是,两者都不执行 Z(),这至少是一件好事。) - Eric Lippert
显示剩余7条评论
1个回答

5
我只是一个C#的初学者,但正在努力学习一切。请确保至少分配几十年时间。我经常学到这种语言的新东西。
我卡在了overloading true和false上;这是什么意思?
它们很少使用;主要需要使用户定义的&&和||运算符成为短路运算符。
阅读我的系列文章,你将对第三部分特别感兴趣,但应该先阅读整个系列。

https://ericlippert.com/2012/03/26/null-is-not-false-part-one/

如果你能够改变coord的值(比如改为(3,5)),请解释一下会产生什么结果。
如果你想知道程序在改变某些内容后的运行结果,那就改变它并运行,很快你就会知道!

...嗯,你非常有帮助。 - user6609573

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