C# 结构,使用方法处理布尔类型

本文关键字:布尔 类型 处理 使用方法 结构 | 更新日期: 2023-09-27 18:33:33

我认为我知道如何处理结构,因为我多年来一直用C语言编程。但是,我在我试图理解的 C# 程序中遇到了这个结构定义。它填充了布尔值,结构的每个实例都将是数组中的一个单元格(此处未显示)。我希望第 3 行中的覆盖用于覆盖基类中的方法"ToString()"。

public struct Cell
    {
        public bool occupied;
        public Cell(bool occupied) { this.occupied = occupied; }
        public override string ToString() { return occupied ? "x" : "."; }
    }

我明白上面的第一行。我相信我对结构中方法的使用感到困惑,因为我假设上述结构定义中的第二行和第三行是方法。第二行让我非常困惑。

谢谢汤姆

C# 结构,使用方法处理布尔类型

结构中的

第二行是结构的构造函数(所以是的,它基本上是一个方法),它将布尔值作为参数并将传递给"占用"字段的值赋值。

第三行是 ToString 方法的重写,该方法由所有内容继承,因为它是 Object 类的内置方法,Object 类是 C# 中存在的所有其他对象的超类。默认情况下,它只输出完全限定的类/结构名称。

C# 的结构与 C 的结构关系不大。在 .NET 中,所有(出于实际目的)实体都继承自 Object。

它们是类(引用类型)还是结构(值类型)并不重要;两者都可以有方法、构造函数、属性、属性等。唯一的限制是不能扩展具体值类型(即不能从结构继承),因为它们的内存占用量和类型在取消装箱时是预定义的。因此,您可以将所有值类型视为"最终值"。

此外,您可以在结构上使用构造函数(这是您在示例代码中间看到的内容)。但是请注意,结构始终具有没有参数的隐式"默认构造函数",它将数据初始化为所有二进制 0。

你的困惑到底是什么?您对行 #2 和 #3 有两个很好的猜测,可以通过一个简单的测试用例轻松验证。

是的,第二行是一个构造函数,它接收一个布尔值并初始化字段的值。

正如您所猜测的,第三行也是覆盖基本 ToString 的方法。在这种情况下,由于没有显式基类,因此该类型扩展了在 System.Object 中找到的方法,在 C# 中俗称 objectobject 的实现将简单地打印出类型名称("MyNamespace.Cell"),但此实现会用布尔字段的内容覆盖它。

结构和类与 C# 中的使用非常相似。因此,您的结构可以具有方法和构造函数。但也有一些不同之处。例如:结构按值调用,类按引用调用。

要选择这些选项中的正确选项之一,请查看此处:https://msdn.microsoft.com/en-us/library/ms229017%28v=vs.110%29.aspx

这里解释了差异:结构与类

C# 中结构体

和类之间的主要区别在于类实例是引用类型,而结构实例是值类型(存储在堆栈中,而不是堆中)。

代码中的第二行只是一个简单的构造函数。结构可以具有构造函数,只要它们不是空构造函数。(参见 https://msdn.microsoft.com/en-us/library/aa288208(v=vs.71).aspx)

第三行覆盖了基对象类方法 ToString()。结构可以定义方法,它没有错。

有关结构

的其他信息,请务必查看有关结构的 MSDN 文档