Как создать класс с каждым свойством как статическим? - PullRequest
0 голосов
/ 12 марта 2012

Я создал решение, которое содержит 3 проекта, как.

//Project Name: ClientProject
    public class UserDetails
    {
        public static int ID { get; set; }
        public static string Name { get; set; }
        public static string Email { get; set; }
    }

Этот класс должен быть установлен один раз, когда пользователь вошел в систему и после этого я хотел бы получить доступ к этим деталям во всем решении.

Как и администрация, проекты SalesInfo.

//Project Name: Administration
    public class Admin
    {
        public static UserDetails Details
        {
            //Here i would like to return UserDetails
            get; 
        }
        public static int DepartmentID { get; set; }
        public static string Phone { get; set; }
        public static string Head { get; set; }
    }

    //Project Name: SalesInfo
    public class Sales
    {
        public static UserDetails Details
        {
            //Here i would like to return UserDetails
            get;
        }
        public static DateTime Date { get; set; }
        public static string Item { get; set; }
        public static int Price { get; set; }
    }

Любой ответ, комментарии или предложения будут высоко оценены

Ответы [ 2 ]

1 голос
/ 12 марта 2012

Используйте вид синглтона, как упомянуто Гроо.

public class UserDetails
{
  public static int ID { get; private set; }
  public static string Name { get; private set; }
  public static string Email { get; private set; }

  private static UserDetails _userDetails;

  private UserDetails(int id, string name, string email)
  {
    ID = id;
    Name = name;
    Email = email;
  }

  public static UserDetails CreateUserDetails(int id, string name, string email)
  {
    if (_userDetails != null)
    {
      throw new MyException("Second call to UserDetails.CreateUserDetails!");
    }
    _userDetails = new UserDetails(id, name, email);

    return _userDetails;
  }

  public static UserDetails GetUserDetails()
  {
    if (_userDetails == null)
    {
      throw new MyException("Not yet created by calling UserDetails.CreateUserDetails!");
    }

    return _userDetails;
  }

}

После входа в систему вы вызываете UserDetails.CreateUserDetails(...), чтобы установить глобальный объект.
Чтобы узнать подробности, звоните GetUserDetails().

1 голос
/ 12 марта 2012

Обычно свойство использует приватное поле для хранения данных. Это поведение добавлено во время компиляции и скрыто для разработчика во время кодирования. Статический метод / свойство не может получить доступ к закрытым переменным / полям в классе.

Рекомендую использовать шаблон синглтона.

public class UserDetails
{
    private static UserDetails _instance;

    public int ID { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }

    private UserDetails() {}

    public static UserDetails Instance
    {
        get
        {
            if (_instance == null)
            {
                 _instance = new UserDetails();
            }
            return _instance;
        }
    }
}

И вы можете так потреблять,

//Project Name: Administration
public class Admin
{
    public static UserDetails Details
    {
        get
        {
            return UserDetails.Instance;
        } 
    }
    public static int DepartmentID { get; set; }
    public static string Phone { get; set; }
    public static string Head { get; set; }
}
...