繁体   English   中英

何时使用自动属性?

[英]When to use automatic properties?

所以,我的代码中有一个加密密钥,如:

private const string _keyc = "blahblahblah";

private static string _key
{
     get { return "blahblahblah"; }
}

在编译之后,在ILDasm ,我注意到我可以直接看到常量的值,但不是在第二种情况下。 但是,我仍然可以在ldstr下看到ldstr的键hidebysig...get_key()

然而,ILSpy完全按照我编写的方式获取源代码。

所以在这里,我想知道,在这里使用汽车房产真的有意义吗? 使用自动属性还有其他优点吗? 特别是在这种简单的情况下,建议使用自动属性吗? 谢谢!

您只能在以下情况下使用自动属性:

  • 该属性是读写; 也就是说,它定义了getset访问器。 如果您只定义一个访问者,则不能使用自动属性。 (请注意,您可以定义一个private set在自动属性访问器,如果你想成为只读从码外的类的属性,但是从类的内部读写。)
  • 您不需要在setter中进行任何验证 - 也就是说,属性类型的所有值都是有效的。
  • 您不需要直接初始化支持字段,而是从构造函数设置属性(或者只保留字段中的默认值)。
  • 您永远不需要直接引用支持字段,例如作为refout参数。 特别是,这将阻止您在该字段上使用System.Threading.Interlocked方法。
  • 该字段的名称并不重要。 (序列化是一个可能被认为很重要的情况。)

根据您的示例,您正在实现只读属性(没有setter的属性)。 在这种情况下,您不能使用自动属性,除非您使用这样的模式:

class Example
{
    public static string SomeProperty { get; private set; }

    static Example()
    {
        SomeProperty = "some value";
    }
}

但是,从getter返回常量值要简单得多,应该首选:

class Example
{
    public static string SomeProperty
    {
        get { return "some value"; }
    }
}

这段代码很明确,而且非常重要。 自动属性应该使您的代码更具可读性。 在这种情况下,他们实际上会混淆意图,所以我不会在这里使用它。


请注意,示例代码中的属性根本不是自动属性; 它只是一个标准的财产。 自动属性声明getter和setter,但不提供实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM