0

可能重复:
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);
}

我应该使用属性还是字段?在此示例中,性能无关紧要。

4

3 回答 3

1

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


进一步澄清:

您编写的不同之处在于,该字段将始终指向同一个实例,而该属性始终创建一个新实例并返回它,因此该属性不断创建新实例,这可能不是您想要的,并且可能是性能问题视情况而定。

于 2013-01-14T10:23:06.480 回答
1

在我看来,它是字段,因为它是您需要的最低限度,而且它可能更具可读性。但实际上,考虑到按值传递的语义,在这个结构中呈现的这种微不足道的情况下并没有实际的区别。

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

于 2013-01-14T10:23:20.753 回答
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

Try to think "string has a public property called Empty", No, Empty is not a property of a string. Things are almost the same in your case. "State has a property called One" sounds really weired.

于 2013-01-14T10:33:05.783 回答