通过公共财产访问私有变量

时间:2013-02-28 04:02:38

标签: c# asp.net .net private-members

我似乎无法通过其他类的公共属性访问我的私有成员变量。我正在尝试通过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
{
}    

3 个答案:

答案 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应用程序是无状态应用程序,因此每个网页的生命周期都在每个请求的生命周期内。

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

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

答案 2 :(得分:0)

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