像枚举一样的结构

时间:2013-01-14 10:20:25

标签: c# struct enums

  

可能重复:
  Difference between Property and Field in C# .NET 3.5+

示例代码:

public struct State
{
    private readonly byte state;

    private State (byte pState)
    {
        state = pState;
    }

    // property...

    public static State StateOne
    {
        get
        {
            return new State (1);
        }
    }

    // or...

    public static readonly State StateOne = new State (1);
}

我应该使用属性还是字段?在这个例子中,性能并不重要。

3 个答案:

答案 0 :(得分:1)

除非您将该属性用作新实例的Factory,否则应将返回的“new State(1)”缓存在私有成员中,并在第一次调用之后返回该属性,这将初始化它。 (单身人士)


进一步明确:

你写的内容的不同之处在于该字段总是指向同一个实例,而属性总是创建一个新实例并返回它,因此该属性不断创建新实例,这可能不是你想要的,也可能是性能问题取决于具体情况。

答案 1 :(得分:1)

在我看来,它是领域,因为它是你需要的最小值,它可能更具可读性。但实际上,在给定值传递语义的情况下,在这种结构中呈现的这种微不足道的情况没有实际差异。

特别是 - 具有缓存的本地字段的属性的参数(如此处的另一个答案))在引用相等的基础上完全无效,因为根据它们的定义,值类型永远不能被引用 - 相等。

答案 2 :(得分:1)

我想在这里使用字段而不是属性。看看MS人员如何做类似的工作:

//String.cs
public int Length { get; }   //string has a property named Length
public static string Empty = ...    //string has a public field named Empty

尝试认为“字符串有一个名为的公共属性”,不,不是字符串的属性。在你的情况下情况几乎相同。 “州有一个名为 One 的财产”听起来真的很受欢迎。