2013-01-14 37 views
0

可能重复:
Difference between Property and Field in C# .NET 3.5+的Structs像枚举

示例代码:

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); 
} 

我应该使用性质或领域?这个例子中的性能并不重要。

回答

1

在我看来,它是领域,因为它是你需要的最低限度,它可能更具可读性。但是实际上,在给出传递值语义的这个结构中提供的这样一个微不足道的情况并没有实际的区别。

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

1

除非您将该属性用作新实例的工厂,否则应该将返回的“新状态(1)”缓存到私有成员中,并在第一次调用后将其返回,以初始化它。 (单体)


进一步明确:

的差额,在你写的是场永远指向同一个实例,而属性总是创建一个新的实例,并返回它,所以属性不断创建新的实例,这可能不是您想要的,并且可能是性能问题,具体取决于具体情况。

+0

为什么要缓存,如果这是一个结构而不是类? – zgnilec

+1

没有什么区别 - 作为一个结构体,价值无论如何都是按值传递的。 –

+0

@zgnilec就像我说的,它取决于你想要什么,你想不断创建实例或返回相同的并保留对它的引用吗? – dutzu

1

我想在这里使用字段而不是属性。见MS家伙是怎么做similiar工作:

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

再想想“串有公共财产称为”,不,不是一个字符串的属性。你的情况几乎相同。 “国家有一个名为的房产,其中一个”听起来真的很糟糕。