【问题标题】:What does overloading true and false operators do?重载真假运算符有什么作用?
【发布时间】:2016-07-19 16:30:54
【问题描述】:

我只是 C# 的初学者,但我正在努力学习一切。但是,我被重载的真假困住了;这是什么意思?请(尝试)给出尽可能基本的答复(这样即使是 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; 
        }
    }
}

主类程序内部:

class Program
{
    static void Main(string[] args)
    {
        Coord coord = new Coord(0, 0);

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

        Console.ReadLine();
    }
}

【问题讨论】:

  • 您好,欢迎来到 StackOverflow!通过逐行调试您自己的代码将帮助您了解您的程序在做什么。
  • 在您尝试调试代码后,如果您仍有疑问,请确保您已提供minimal reproducible example。另请参阅How to Ask
  • 这是一个 C# 版本 1 设计错误,受到启发是因为它还没有可为空的类型。已经完成的事情无法撤消,但您当然可以停止使用它。名称如 IsEmpty 的属性将是一个明智的选择。或者只是使用a .NET type 而不是自己编写。或者让它可以为空。
  • @HansPassant:很有趣。我从未审查过该文件。如果我这样做了,我会对提议的 DBNull 类型使用运算符 true 和 false 进行彻底的批评。

标签: c# operator-overloading


【解决方案1】:

我只是 C# 的初学者,但我正在努力学习一切。

确保至少分配几十年。我经常学习关于这种语言的新东西。

我卡在重载真假上;这是什么意思?

它们很少使用;它们主要用于使用户定义的&&|| 运算符短路。

阅读我关于这个主题的系列文章;您将对第三部分特别感兴趣,但您应该阅读全文。

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

如果可以的话,请解释一下如果坐标换成别的东西(例如:(3,5))会是什么结果。

如果您想知道程序在更改某些内容时会做什么,请更改并运行它,很快您就会知道!

【讨论】:

  • ...好吧,你“非常”乐于助人
猜你喜欢
  • 2010-10-15
  • 2014-08-03
  • 2020-02-08
  • 1970-01-01
  • 2012-05-09
  • 2017-02-20
  • 1970-01-01
  • 2011-01-21
相关资源
最近更新 更多