为什么 ConfigurationSection 需要使用字符串查找内容?
Why does ConfigurationSection need to look things up with a string?
我在网上找到的 ConfigurationSection
个例子 (for example) 都有这样的代码:
public class ConnectionSection : ConfigurationSection
{
[ConfigurationProperty("Servers")]
public ServerAppearanceCollection ServerElement
{
get { return ((ServerAppearanceCollection)(base["Servers"])); }
set { base["Servers"] = value; }
}
}
为什么要使用方括号从基数访问值 "Servers"? setter 是从 xml 创建此对象时使用的,还是 setter 用于覆盖 xml 文件中的值?如果是这样,为什么要在此 属性 上设置属性?
Why is it accessing the value "Servers" from the base using the square brackets?
因为基础 class、ConfigurationSection 不知道其继承者将要实现的属性。
因此它公开了 a string indexer: this[string]
,使您可以访问从配置中读取的值。
这是设计决定。 .NET 团队也可以选择使用反射来获取和设置继承者的属性,但决定不这样做。 (好吧,当然在配置部分中有很多反思,但直到 public ServerAppearanceCollection ServerElement { get; set; }
可以工作为止)。
@CodeCaster 的回答的一点补充。
使用 C#6,您可以让生活更轻松:
class MyConfigSection : ConfigurationSection
{
[ConfigurationProperty(nameof(SomeProperty))]
public int SomeProperty
{
get { return ((int)(base[nameof(SomeProperty)])); }
set { base[nameof(SomeProperty)] = value; }
}
}
特别是,如果此代码块将变成代码片段。
我在网上找到的 ConfigurationSection
个例子 (for example) 都有这样的代码:
public class ConnectionSection : ConfigurationSection
{
[ConfigurationProperty("Servers")]
public ServerAppearanceCollection ServerElement
{
get { return ((ServerAppearanceCollection)(base["Servers"])); }
set { base["Servers"] = value; }
}
}
为什么要使用方括号从基数访问值 "Servers"? setter 是从 xml 创建此对象时使用的,还是 setter 用于覆盖 xml 文件中的值?如果是这样,为什么要在此 属性 上设置属性?
Why is it accessing the value "Servers" from the base using the square brackets?
因为基础 class、ConfigurationSection 不知道其继承者将要实现的属性。
因此它公开了 a string indexer: this[string]
,使您可以访问从配置中读取的值。
这是设计决定。 .NET 团队也可以选择使用反射来获取和设置继承者的属性,但决定不这样做。 (好吧,当然在配置部分中有很多反思,但直到 public ServerAppearanceCollection ServerElement { get; set; }
可以工作为止)。
@CodeCaster 的回答的一点补充。
使用 C#6,您可以让生活更轻松:
class MyConfigSection : ConfigurationSection
{
[ConfigurationProperty(nameof(SomeProperty))]
public int SomeProperty
{
get { return ((int)(base[nameof(SomeProperty)])); }
set { base[nameof(SomeProperty)] = value; }
}
}
特别是,如果此代码块将变成代码片段。