我在网上找到的ConfigurationSection
示例(for example)都有如下代码:
public class ConnectionSection : ConfigurationSection
{
[ConfigurationProperty("Servers")]
public ServerAppearanceCollection ServerElement
{
get { return ((ServerAppearanceCollection)(base["Servers"])); }
set { base["Servers"] = value; }
}
}
为什么使用方括号从基座访问值“Servers”?是从xml创建此对象时使用的setter,还是用于覆盖xml文件中的值的setter?如果是这样,为什么要在此属性上设置属性?
答案 0 :(得分:8)
为什么使用方括号从基座访问值“Servers”?
因为基类ConfigurationSection不知道它的继承者将要实现什么属性。
因此它公开a string indexer: this[string]
,允许您访问从配置中读取的值。
这是一项设计决定。 .NET团队也可以选择使用反射来获取和设置继承者的属性,但决定不这样做。 (当然,配置部分中有很多反映,但直到public ServerAppearanceCollection ServerElement { get; set; }
起作用为止)。
答案 1 :(得分:3)
@ CodeCaster答案的一点点补充。
使用C#6,您可以让您的生活更轻松:
class MyConfigSection : ConfigurationSection
{
[ConfigurationProperty(nameof(SomeProperty))]
public int SomeProperty
{
get { return ((int)(base[nameof(SomeProperty)])); }
set { base[nameof(SomeProperty)] = value; }
}
}
特别是,如果此代码块将转换为代码段。