所以,我的代码中有一个加密密钥,如:
private const string _keyc = "blahblahblah";
private static string _key
{
get { return "blahblahblah"; }
}
编译后,在ILDasm
上,我注意到我可以直接看到常量的值,但不是第二种情况。但是,我仍然可以在ldstr
hidebysig...get_key()
中看到关键字
然而,ILSpy完全按照我编写的方式获得了源代码。
所以在这里,我想知道,在这里使用汽车房产真的有意义吗?使用自动属性还有其他优点吗?特别是在这种简单的情况下,建议使用自动属性吗?谢谢!
答案 0 :(得分:3)
只有在以下情况下才能使用自动属性:
get
和set
个访问者。如果您只定义一个访问者,则不能使用自动属性。 (注意,如果您希望该属性对于类外部的代码是只读的,那么可以在自动属性上定义private set
访问器,但是从类内部进行读写。 )ref
或out
参数。特别是,这将阻止您在该字段上使用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,但是没有提供实现。