2012-03-12 2 views
0

Я создал решение, которое содержит 3 проекта типа.Как создать класс со всеми свойствами как Static?

//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; } 
    } 

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

+0

Это веб-приложение? Выиграть формы? WPF? Должна ли информация быть доступной для всех или это «на пользователя»? Вы смотрели образцы дизайна? – Chuck

+3

Это очень плохое дизайнерское решение. Трудно проверить и невозможно расширить с помощью механизмов ООП. Если вам нужен один экземпляр вашего класса, посмотрите шаблон Singleton, но сделайте экземпляр членов вашего класса. И из вашего вопроса, который я предполагаю 'static', вы на самом деле означаете ** только для чтения **? – Groo

+1

Вы можете использовать статический конструктор. – Steven

ответ

1

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

Я рекомендую использовать одноэлементный узор.

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

Спасибо, мой голос +1, см. Следующий http://stackoverflow.com/questions/9667931/static-class-property-getting-null-when-custom-validation- fired-in-silverlight-4 – imdadhusen

1

Используйте вид из одноэлементных как уже упоминалось Groo.

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().

+0

Спасибо за ваш ценный ответ, но моя проблема здесь http://stackoverflow.com/questions/9667931/static-class-property-getting-null-when-custom-validation-fired-in- silverlight-4 – imdadhusen

+0

Спасибо, мой голос +1 – imdadhusen

+0

Извините, что я не эксперт Silverlight. – brgerner

Смежные вопросы