我似乎无法通过其他类的公共属性访问我的私有成员变量。我正在尝试通过Student Class在Student
中实例化一些StudentList
个对象。我以前做过但不能为我的生活记住或发现任何有效的东西。我对编程比较陌生,所以对我很轻松。
学生班级代码
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 :(得分:3)
首先,回答你的问题:
“我似乎无法通过他们访问我的私有成员变量 来自不同班级的公共财产......“
这正是他们被称为私人的原因。私有成员只能在声明它们的类中访问,并且必须使用公共属性才能从其他类访问。
现在,一些建议:
1)避免使用与Code Behind相同的类和域模型类。我强烈建议您仅使用属性/业务方法创建单独的“学生”类,并将代码保留为单独的“StudentPage”类。这使得您的代码更易于使用,因为不同的关注点是分开的(视图逻辑x业务逻辑),并且因为这些类中的每一个都应该具有不同的生命周期。
2)而不是:
private int StudentID;
public int studentID
{
get
{
return StudentID;
}
set
{
StudentID = value;
}
}
...您可以编写自动属性:
public int StudentId { get; set; }
答案 1 :(得分:2)
此处的重点是Web应用程序是无状态应用程序,因此每个网页的生命周期都在每个请求的生命周期内。
在您的代码中Student
和StudentList
是网页,因此StudentList
您无法访问Student
的实例,因为它不再存在。
因此,请考虑使用Session
在页面之间传输数据。
答案 2 :(得分:0)
我找到了简单的解决方案。我试图从另一个页面访问一个页面背后的代码,正如你们许多人指出的那样,它们不会很好玩。通过将代码移动到App_Code文件夹中自己的c#类中,可以访问所有内容。谢谢你的帮助!