2010-09-11 94 views
3

我有一个静态类,我用它来访问我的公共属性(全局应用程序)和我在应用程序运行时使用的方法。例如,我在静态类中设置了一些属性,在应用运行时我可以从属性中获取值。静态类与类的实例

但我可以用单例模式创建非静态类,并以相同的方式使用它。

问题:在我的情况下,哪种方法是正确的?

回答

3

下面示例示出了可以使用的接口与一个单独的类(这是不可能用静态类。)

我更喜欢上述静态方法/属性或几个静态类的大名单这种模式。

这些接口可以提供,甚至可以用来作为参数传递给其他方法或类,而这些类需要知道的设置来的,只要合同推崇主题的特定设置。

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); 
    } 
+0

但是,从xmlDocument延迟加载,缓存和序列化配置设置也是不错的做法;) – 2010-09-11 16:21:14

+0

+ 1用于编写所有thye步骤。 – TalentTuner 2010-09-11 17:07:56

3

取决于你想要达到的目标。

我会去静态类在您的应用程序中提供实用程序功能,并且大多数情况下避免这种类型的东西的单身人士。有关何时使用单身人士的信息,请参阅this question

如果你的类代表系统中的某种实体(例如:用户,博客文章,产品,学生等),它不应该是一个静态类,而是每次你在逻辑上使用时被实例化它的一个单独的实例。

0

我认为当他们真正想要一个静态类时,人们倾向于使用单例类,但需要确保该类是以某个值启动的。但是,如果可以的话,他们都应该避免。当没有理由,像实例.NET Framework中的数学类

+0

做使用单,因为他们希望有一个“与一些价值观发起静态类”告诉我的状态只能用不使用静态人们避风港”了解了面向对象的要点。静态类的全部要点是不应该有它的任何实例。 – 2010-09-11 16:06:55

+0

这就是为什么静态可能不是面向对象,而是元OO? – 2010-09-11 16:15:20

+0

是的 - 我个人认为如果你想“发起一个有一些价值的静态类”,你应该看看实例类或静态构造函数(很多人不知道)。 – 2010-09-11 18:05:01

1

我的想法

1静态类被使用。

数学类是netural是静态的,因为有没有好的理由有这个类的对象,然后保持对象。

2-单例模式可能会与静态类概念混淆,但在单例中,您将获得在内存中创建的整个对象。

所以它最终取决于你的要求。

1

从OO看/的视图可测试性点既不是一个特定的很好的解决方案。搜索SO for singleton来查看参数。这说的,如果你需要/想编写程序代码与数学