2013-02-28 112 views
2

我似乎無法通過其他類的公共屬性訪問我的私有成員變量。我試圖通過學生類在StudentList中實例化一些Student對象。我已經做過,但不能爲我的生活記住或找到任何有用的東西。我對編程比較陌生,所以對我來說很簡單。通過公共屬性訪問私有變量

學生類代碼

public partial class Student : Page 
{ 
    public int StudentID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public double CurrentSemesterHours { get; set; } 
    public DateTime UniversityStartDate { get; set; } 
    public string Major { get; set; } 
    public string FullName 
    { 
     get { return FirstName + " " + LastName; } 
    } 

    new DateTime TwoYearsAgo = DateTime.Now.AddMonths(-24); 

    public Boolean InStateEligable 
    { 
     get 
     { 
      if (UniversityStartDate < TwoYearsAgo) // at first glance this looks to be wrong but when comparing DateTimes it works correctly 
      { 
       return true; 
      } 
      else { return false; } 
     } 
    } 
    public decimal CalculateTuition() 
    { 
     double tuitionRate; 
     if (InStateEligable == true) 
     { 
      tuitionRate = 2000; 
     } 
     else 
     { 
      tuitionRate = 6000; 
     } 
     decimal tuition = Convert.ToDecimal(tuitionRate * CurrentSemesterHours); 
     return tuition; 
    } 

    public Student(int studentID, string firstName, string lastName, double currentSemesterHours, DateTime universityStartDate, string major) 
    { 
      StudentID = studentID; 
      FirstName = firstName; 
      LastName = lastName; 
      CurrentSemesterHours = currentSemesterHours; 
      UniversityStartDate = universityStartDate; 
      Major = major; 
     } 
    } 

StudentList類代碼,現在基本上是空白。我一直在試圖讓intellisense訪問我的其他課程,但沒有運氣到目前爲止。我必須錯過簡單的東西。

public partial class StudentList : Page 
{ 
}  
+0

你有你的班級的實例訪問? – 2013-02-28 04:04:09

+0

你想從StudentList訪問學生? – 2013-02-28 04:04:46

+0

@ cuong le,是 – Milne 2013-02-28 04:05:39

回答

0

我找到了簡單的解決方案。我試圖從另一個頁面訪問後面的代碼,正如你們許多人指出的那樣,代碼不會很好。通過將代碼移入它自己的App_Code文件夾中的c#類,它可以被任何東西訪問。謝謝您的幫助!

2

在這裏的要點是Web應用程序是無狀態應用,所以每個網頁的壽命是每個請求的使用壽命。

在你的代碼StudentStudentList是網頁,所以從StudentList因爲它沒有再活下去了,你不能訪問的Student實例。

因此,請考慮使用Session在頁面之間傳輸數據。

+0

我正在尋找這樣的事情... 學生學生=新的學生(StudentID,名字,姓氏,CurrentSemesterHours,UniversityStartDate,專業); – Milne 2013-02-28 04:15:18

+0

你說得對。通過將代碼移入它自己的App_Code文件夾中的c#類,它可以被任何東西訪問。謝謝您的幫助! – Milne 2013-03-05 15:47:18

3

首先,要回答你的問題:

「我似乎無法通過他們的 公共屬性從不同的類來訪問我的私有成員變量...」

是恰好爲什麼他們被稱爲私人。私人成員只能在聲明它們的類中訪問,並且必須使用公共屬性才能從其他類訪問。

現在一些建議:

1)避免使用同一個班的背後準則和領域模型類。我強烈建議您僅使用屬性/業務方法創建一個單獨的「學生」類,並將代碼作爲單獨的「StudentPage」類保留。這使得您的代碼更易於使用,因爲不同的關注點是分開的(視圖邏輯x業務邏輯),並且因爲每個類都應具有不同的生命週期。

2)替代:

private int StudentID; 
public int studentID 
{ 
    get 
    { 
     return StudentID; 
    } 
    set 
    { 
     StudentID = value; 
    } 
} 

...你可以寫自動屬性

public int StudentId { get; set; } 
+0

偉大的建議,謝謝。 – Milne 2013-02-28 04:26:48

+0

我沒有對自動屬性的原因是因爲我需要證明我可以通過公共屬性訪問私有變量。感謝關於將我的代碼分離到n層體系結構的提示。它幫助我記住,我需要將我的代碼移到App_Code文件夾中的自己的類中,以便我可以從任何地方訪問它。謝謝! – Milne 2013-03-05 15:49:45