2

別のクラスのパブリックプロパティを介してプライベートメンバー変数にアクセスできないようです。StudentClassを介していくつかの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)CodeBehindおよびドメインモデルクラスと同じクラスを使用することは避けてください。プロパティ/ビジネスメソッドのみを使用して別の「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アプリケーションはステートレスアプリケーションであるため、各Webページの有効期間はリクエストごとの有効期間です。

あなたのコードStudentStudentListはそしてウェブページなので、それはもう生きていないのでStudentListあなたはのインスタンスにアクセスすることができませStudentん。

したがって、Sessionページ間でデータを転送するためにを使用することを検討してください。

于 2013-02-28T04:09:45.537 に答える
0

簡単な解決策を見つけました。あるページの背後にあるコードに別のページからアクセスしようとしていましたが、多くの人が指摘しているように、うまく再生されません。コードをApp_Codeフォルダー内の独自のc#クラスに移動することで、すべてのユーザーがアクセスできるようになります。助けてくれてありがとう!

于 2013-03-05T15:46:30.223 に答える