我有一个静态类,我用它来访问我的公共属性(全局应用程序)和我在应用程序运行时使用的方法。例如,我在静态类中设置了一些属性,在应用运行时我可以从属性中获取值。静态类与类的实例
但我可以用单例模式创建非静态类,并以相同的方式使用它。
问题:在我的情况下,哪种方法是正确的?
我有一个静态类,我用它来访问我的公共属性(全局应用程序)和我在应用程序运行时使用的方法。例如,我在静态类中设置了一些属性,在应用运行时我可以从属性中获取值。静态类与类的实例
但我可以用单例模式创建非静态类,并以相同的方式使用它。
问题:在我的情况下,哪种方法是正确的?
下面示例示出了可以使用的接口与一个单独的类(这是不可能用静态类。)
我更喜欢上述静态方法/属性或几个静态类的大名单这种模式。
这些接口可以提供,甚至可以用来作为参数传递给其他方法或类,而这些类需要知道的设置来的,只要合同推崇主题的特定设置。
public sealed class Settings : IUserStettings, IOSettings
{
static readonly Settings instance = new Settings();
static Settings(){ }
Settings(){ }
public static Settings Instance
{
get { return instance; }
}
//-- interface implementation
public string UserName
{
get { throw new NotImplementedException(); }
}
// ---etc...
public string filename
{
get { throw new NotImplementedException(); }
}
//-- interface implementation
}
public interface IOSettings
{
string disk {get;}
string path { get; }
string filename { get; }
}
public interface IUserStettings
{
string UserName { get; }
string Password { get; }
}
而且这可以以简单的方式一起使用:
IOSettings iosettings = Settings.Instance as IOSettings;
if(iosettings!=null){
Filereader.ReadData(IOSettings iosettings);
}
或
IUserSettings usersettings = Settings.Instance as IUserSettings;
if(usersettings!=null){
UserManager.Login(IUserSettings usersettings);
}
取决于你想要达到的目标。
我会去静态类在您的应用程序中提供实用程序功能,并且大多数情况下避免这种类型的东西的单身人士。有关何时使用单身人士的信息,请参阅this question。
如果你的类代表系统中的某种实体(例如:用户,博客文章,产品,学生等),它不应该是一个静态类,而是每次你在逻辑上使用时被实例化它的一个单独的实例。
我认为当他们真正想要一个静态类时,人们倾向于使用单例类,但需要确保该类是以某个值启动的。但是,如果可以的话,他们都应该避免。当没有理由,像实例.NET Framework中的数学类
做使用单,因为他们希望有一个“与一些价值观发起静态类”告诉我的状态只能用不使用静态人们避风港”了解了面向对象的要点。静态类的全部要点是不应该有它的任何实例。 – 2010-09-11 16:06:55
这就是为什么静态可能不是面向对象,而是元OO? – 2010-09-11 16:15:20
是的 - 我个人认为如果你想“发起一个有一些价值的静态类”,你应该看看实例类或静态构造函数(很多人不知道)。 – 2010-09-11 18:05:01
我的想法
1静态类被使用。
数学类是netural是静态的,因为有没有好的理由有这个类的对象,然后保持对象。
2-单例模式可能会与静态类概念混淆,但在单例中,您将获得在内存中创建的整个对象。
所以它最终取决于你的要求。
从OO看/的视图可测试性点既不是一个特定的很好的解决方案。搜索SO for singleton来查看参数。这说的,如果你需要/想编写程序代码与数学
但是,从xmlDocument延迟加载,缓存和序列化配置设置也是不错的做法;) – 2010-09-11 16:21:14
+ 1用于编写所有thye步骤。 – TalentTuner 2010-09-11 17:07:56