0

私は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; }
    }

この上記のクラスは一度設定する必要があります。ユーザーがログインした後、ソリューション全体でこれらの詳細にアクセスしたいと考えています。

Administration、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; }
    }

回答、コメント、または提案をいただければ幸いです

4

2 に答える 2

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

于 2012-03-12T12:28:06.010 に答える
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; }
}
于 2012-03-12T12:19:39.063 に答える