简介
在当今世界的定位成为一个必须的要求,我们开发的应用程序。我们可以很容易地实现这一目标,通过使用静态资源,如异常消息recource文件,标签文本等,但使用本地化数据从数据源获取,将是一个问题。由于数据是动态的,这个问题不能得到解决,与资源文件。使用代码
大多数开发人员解决这个问题,使用下面这样的设计,
{S0的} NBSP。,如果我们看一下在设计中我们看到,我们正在创造一个新的对象每个属性包含多语言数据。所有这些对象的原因开发人员编写更多的代码,也将应用程序代码易于管理。此外,如果开发人员正在使用的ORM工具,他/她最终将创造大量的映射。现在,让我们想从另一个角度看,并尝试实现一个象下面这样
{S} NBSP的设计。正如你可以看到这样的设计更简单理解,并具有较高的可重用性。您可以使用的MultilanguageProperty,多语言数据存储在一个object.nbsp财产;
现在让我们看看我们如何才能从design.nbsp写此代码,让所有的代码
第一语言类,我们将使用MultilanguageProperty.nbsp;
正如你可以看到我们定义的语言,我们要使用一个枚举。和我们实行的方法,是负责返回的默认语言。此方法可以返回默认语言,每节或每用户的基础上指出implementation.nbsp public class Language
{
public enum ApplicationLanguage
{
Turkish,
English,
}
public static ApplicationLanguage GetDefaultLanguage()
{
return ApplicationLanguage.Turkish;
}
}
让开始编码MultilanguageProperty object.nbsp;
{C}
首先使用我们正在对象的通用与任何类型的对象。并允许用户在此对象的子项,我们作为above.nbsp实现IEnumerable接口; NBSP遍历
声明一个属性,其类型是IDictionary的是这种实现的主要思想。这本字典将存储基于语言值的数据。正如你可以看到IDictinary是一个ApplicationLanguage枚举键和T值的泛型类型的泛型类型。在我们的代码的构造,我们创建例如本Dictionary.nbsp;
现在,让我们执行一些代码到访问值property.nbsp存储数据;
的正如你可以看到两个重载GetValue方法。其中一个返回值的默认语言和其他回报的为作为parameter.nbsp通过语言的价值; public T GetValue(Language.ApplicationLanguage language)
{
return (T)Values[language];
}
public T GetValue()
{
Language.ApplicationLanguage applicationLanguage = Language.GetDefaultLanguage();
return (T)Values[applicationLanguage];
}
public T this[Language.ApplicationLanguage l]
{
get
{
return Values[l];
}
set
{
Values[l] = value;
}
}
public static implicit operator T(MultilanguageProperty<T> instance)
{
if (instance == null)
{
return default(T);
}
return instance.GetValue();
}
public static implicit operator List<KeyValuePair<Language.ApplicationLanguage,T>>(MultilanguageProperty<T> instance)
{
if (instance == null)
{
return null;
}
return instance.Values.ToList();
}
#region IEnumerable<KeyValuePair<ApplicationLanguage,T>> Members
public IEnumerator<KeyValuePair<Language.ApplicationLanguage, T>> GetEnumerator()
{
return Values.GetEnumerator();
}
#endregion
#region IEnumerable Members
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return Values.GetEnumerator();
}
#endregion
}
}
也有一个索引属性来访问一个索引值。和有一个隐含的运营商,是指不使用任何演员访问的默认语言值或转换function.nbsp的;
现在让我们创建一个测试application.nbsp;
{体C3}
这里是测试应用程序的输出
{S2的} NBSP。
请随意联系任何questions.nbsp的我;
历史
2011年12月22日:初步Versionnbsp;