2

我似乎无法通过来自不同类的公共属性访问我的私有成员变量。我正在尝试通过学生类实例化一些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 类代码现在基本上是空白的。我一直在搞乱它,试图让智能感知访问我的其他课程,但到目前为止还没有运气。我一定错过了一些简单的东西。

public partial class StudentList : Page
{
}    
4

3 回答 3

3

首先,回答你的问题:

“我似乎无法通过来自不同类的公共属性访问我的私有成员变量......”

这正是它们被称为私有的原因。私有成员只能在声明它们的类中访问,并且您必须使用公共属性才能从其他类中访问。

现在,一些建议:

1) 避免使用与 Code Behind 和域模型类相同的类。我强烈建议您仅使用属性/业务方法创建一个单独的“Student”类,并将代码作为单独的“StudentPage”类留下。这使您的代码更易于使用,因为不同的关注点是分开的(查看逻辑 x 业务逻辑),并且因为这些类中的每一个都应该具有不同的生命周期。

2)代替:

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

...您可以编写自动属性

public int StudentId { get; set; }
于 2013-02-28T04:21:17.503 回答
2

这里的重点是 Web 应用程序是无状态应用程序,因此每个网页的生命周期都在每个请求的生命周期中。

在您的代码StudentStudentList是网页,因此StudentList您无法访问实例,Student因为它不再存在。

因此,考虑使用Session在页面之间传输数据。

于 2013-02-28T04:09:45.537 回答
0

我找到了简单的解决方案。我试图从另一个页面访问一个页面背后的代码,正如你们中的许多人所指出的那样,它不会很好。通过将代码移动到 App_Code 文件夹中它自己的 c# 类中,所有东西都可以访问它。谢谢您的帮助!

于 2013-03-05T15:46:30.223 回答