2014-09-21 64 views
0

我有一个包含其他类属性的类“Instances.cs”。这个类只使用静态单例初始化一次。另外,每个属性都在get {}内部有一个检查,当它为null时,它将创建此属性的新实例。我的主题是,当我试图给这些属性中的任何一个添加一些值时,它们就保持为空。还有一件事要提,这些类放在我的服务解决方案中,并通过服务实例'SVC'访问。我可能犯了一些错误..我会很感激任何帮助。使用静态单例时,属性没有获得附加值

Instance.cs其中放置所有属性:

public class Instances 
{ 
    private SVC.User _user; 
    private static Instances instance; 

    public Instances() 
    { 
    } 

    /// <summary> 
    /// Singleton instance for this class 
    /// </summary> 
    public static Instances Get 
    { 
     get 
     { 
      return (instance != null) ? instance : new Instances(); 
     } 
     set 
     { 
      instance = value; 
     } 
    } 

    /// <summary> 
    /// Property that is always null 
    /// </summary> 
    public SVC.User User 
    { 
     get 
     { 
      return (this._user != null) ? this._user : new SVC.User(); 
     } 
     set 
     { 
      this._user = value; 
     } 
    } 
} 

增加值User类

Instances.Get.User.Username = txtAdminName.Text; 
Instances.Get.User.IsAdmin = true; 

一两件事提了,该用户类包含属性:用户名(字符串)和isAdmin(布尔)。

回答

2

如果您没有明确设置Get属性,则每次都会返回一个不同的实例(因为它不存储新创建的实例)。

你应该实现它是这样,而不是:

return instance ?? (instance = new Instances()); 

BTW,为您的班级是一个合适的单身,你应该:

  • 使构造私人
  • 删除setter方法在Get财产

而且,Get是属性的一个很不好的名字。单身实例的常用名称包括InstanceDefault

上Singleton模式很好看的:Implementing the Singleton Pattern in C#,通过乔恩斯基特

+0

啊......是的,你说得对,我改变了获取和用户propreties都为你显示和现在的工作,谢谢@Thomas Levesque的! :) – Edgar 2014-09-21 12:54:07

2

这不是一个单独的,因为你可以创建同一个类的多个实例。 试试这个:

public static Instances Get 
{ 
    get { return instance ?? (instance = new Instances()); } 
}