0

したがって、次の情報を含むクラスを作成する必要があります。以下の情報を最も多く含むクラスを作成したか、少なくとも作成しましたが、入学番号と年号の数値の範囲を設定するのに問題があり、誰でも私を助けることができます

C# で Student 型のクラスを実装します。このクラスは、ファイル Student.cs に含まれている必要があります。クラスは次の仕様に準拠する必要があります。

プロパティの例のデータの検証

名「バジル」 空白ではありません

SecondName “Fawlty” 空白ではありません

生年月日 1946 年 8 月 23 日 空白ではない

コース「MAホテルマネジメント」空欄不可

入学許可番号 12345 10000~99999の範囲

年マーク 55 0 ~ 100 の範囲内

私のクラスのためにこれまでに持っているものはここにあります。うまくいけば、これまでのところ正しいです

namespace Student
{
    public class Student
    {
        private string firstname;
        private string secondname;
        private double dateofbirth;
        private string course;
        private int    matricnumber;
        private int    yearmark;

        public Student() 
        {
            firstname = "Basil";
            secondname = "Fawlty";
            dateofbirth = 23/08/1946;
            course = "MA Hotel Management";
            matricnumber = 12345;
            yearmark = 55;
        }
        public string FirstName
        {
            get { return firstname; }
            set { firstname = value; }
        }

        public string SecondName
        {
            get { return secondname; }
            set { secondname = value; }
        }
        public double DateOfBirth 
        {
            get { return dateofbirth; }
            set { dateofbirth = value; }
        }

        public string Course
        {
            get { return course; }
            set { course = value; }
        }
        public int Matricnumber
        {
            get { return matricnumber; }
            set { matricnumber = value; }
        }
        public int YearMark
        {
            get { return yearmark; }
            set {yearmark = value; }

        }
    }
}
4

4 に答える 4

2

セッターにいくつかのロジックを実装して、値が有効かどうかを確認できます。LastNameしたがって、「Johnson」、「Smith」、または「Roberts」のみであるクラスで呼び出されるプロパティが必要であるとします。私はこのようなことができます:

private string _lastName;
public string LastName
{
    get { return _lastName; }
    set
    {
        if (value == "Johnson" || value == "Smith" || value == "Roberts")
        {
            _lastName = value;
        }
        else
        {
            // Do something here. Maybe set a default.  Maybe throw an exception. Whatever.
        }
    }
}

免責事項:これは宿題のように聞こえるので、正確な解決策は書きませんでした。

于 2012-10-19T21:01:23.827 に答える
2

データ検証を「set」メソッドに入れる必要があります。ユーザーが無効な値を入力した場合、例外をスローします。

    public int Matricnumber
    {
        get { return matricnumber; }
        set { 
               if (value > 99999 | value < 10000)
                    throw new ArgumentException("Invalid value - MaticNumber must be in the range 10000-99999");
               matricnumber = value;
            }
    }

空にできない値については、クラスをデフォルト値で初期化することに意味がないため、後で String.IsNullOrEmpty を使用してこれを検証するために、おそらく何らかのタイプの Validate() メソッドを提供する必要があります。

これは理にかなっていますか?

于 2012-10-19T21:03:05.837 に答える
1

クラスごとに検証が必要な場合は、次のようなことができます。

    public int Matricnumber
    {
        get { return matricnumber; }
        set 
        {
           if (value < MinMatric || value > MaxMatric)
             throw new ArgumentOutOfRangeException("Matricnumber"); 
           matricnumber = value; 
        }
    }
于 2012-10-19T21:01:27.760 に答える
0

あなたの質問は、悪い値が設定されるのを防ぎたい動作を指定していません。

一般的に、私はあなたが指定した制限要件のコード コントラクトのファンです。コントラクトを使用して問題を解決する 1 つの方法を次に示します。

[ContractInvariantMethod]
private void ObjectInvariant()
{
    Contract.Invariant( matricnumber <= 99999 );
    Contract.Invariant( matricnumber >= 10000 );
    Contract.Invariant( yearmark <= 100 );
    Contract.Invariant( yearmark >= 0 );
}

これには、Microsoft のコード コントラクトをここからインストールし、ランタイム チェックを有効にする必要があります。はContractInvariantMethod、メソッドの開始時と終了時に true でなければならない不変条件を提供します。不変式が成り立たない場合、例外がスローされます。ただし、別の障害動作を構成できます。

クラスには、制限が適用されるプロパティ内で使用できる他のContractメンバーもあります。

より伝統的な解決策は、条件ステートメントを使用して、セットの要件を確認し、エラーを処理することです (例外をスローする、アクションを実行しない、最も近い境界に設定するなど)。

于 2012-10-19T21:03:53.970 に答える