c# - 在 C# 中构建结构时出错

标签 c# struct default-constructor automatic-properties

<分区>

对于标题的一般性,我深表歉意,我真的不明白我收到的错误。

所以我正在关注 this tutorial on C# ,我到了“结构和内存管理”部分。

在 5:30 左右,他开始创建一个 Color 结构,所以我逐行跟进。一直以来,他的代码都没有显示错误。

我的错误

然而,我的确实如此。其中四个,准确地说:

1) 错误 1:自动实现的属性“Color.R”的支持字段必须在控制返回给调用者之前完全分配。考虑从构造函数初始值设定项调用默认构造函数。

错误 2 和 3 与 1 相同,只是将 Color.R 替换为 Color.GColor.B

最后,错误4:

“this”对象在其所有字段都分配给之前不能使用。

代码

这是我的 Color 结构的代码(同样,我很难注意到我的代码和教程大师的代码之间的任何区别):

public struct Color
{
    public byte R { get; private set; }
    public byte G { get; private set; }
    public byte B { get; private set; }

    public Color(byte red, byte green, byte blue)
    {
        R = red;
        G = green;
        B = blue;
    }

    public static Color Red
    {
        get { return new Color(255, 0, 0); }
    }

    public static Color Green
    {
        get { return new Color(0, 255, 0); }
    }

    public static Color Blue
    {
        get { return new Color(0, 0, 255); }
    }

    public static Color Black
    {
        get { return new Color(0, 0, 0); }
    }

    public static Color White
    {
        get { return new Color(255, 255, 255); }
    }
}

我是 C# 的新手,但有一些 PHP 经验,所以我对这里到底发生了什么感到有点困惑。想法?

最佳答案

Structs 只能真正使用默认构造函数进行初始构建。更改您的构造函数以调用默认值:

public Color(byte red, byte green, byte blue)
    : this() 
{
    this.R = red;
    this.G = green;
    this.B = blue;
}

通过调用 this,您将使用默认构造函数,然后在该特定实例上设置私有(private)值。如果这是一个 class 而不是 struct,您的代码就可以正常运行。

关于c# - 在 C# 中构建结构时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21248090/

相关文章:

json - 检查值是否为 typeof struct

c++ - 如果没有有意义的值,是否必须提供默认构造函数?

c# - 开发一个使用 mat lab 的人脸识别网络服务是否简单?

c# - 如何将 C# 字符串一分为二?

Linux/OSX 中的 C# GUI

c - 头文件typedef定义

c# - ReSharper 10 测试运行器无法找到从外部文件引用的 AppSettings

struct - Elixir 结构真的是不可变的吗?

javascript - 更改 Javascript 构造函数类中属性的默认值

c++ - 如果未提供默认构造函数,如何使用流提取运算符?