Yoa*_*kov 5 c# class restriction
我想知道是否有办法限制建筑价值.这是我的代码:
class Student : Human
{
private double Grade;
public Student(string FirstName, string LastName, double Grade)
: base(FirstName, LastName)
{
this.FirstName = FirstName;
this.LastName = LastName;
this.Grade = Grade;
}
}
Run Code Online (Sandbox Code Playgroud)
当我创建一个新学生时,我希望将等级限制在> = 2.00和<= 6.00之间,如编译错误或运行时异常.有办法吗?(不要担心其他字段FirstName和LastName)
Dan*_*ker 12
您可以检查它并在运行时抛出异常,如下所示:
if (grade < 2.00 || grade > 6.00)
throw new ArgumentOutOfRangeException("grade");
Run Code Online (Sandbox Code Playgroud)
始终将这些条件放在方法或构造函数的开头.我甚至把它们放在自己的#region
(但这是我个人的偏好):
public Student(string firstName, string lastName, double grade)
: base(firstName, lastName)
{
#region Contract
if (grade < 2.00 || grade > 6.00)
throw new ArgumentOutOfRangeException("grade");
#endregion
this.FirstName = firstName;
this.LastName = lastName;
this.Grade = grade;
}
Run Code Online (Sandbox Code Playgroud)
但是,有一种方法可以使用代码约定来获取此类事件的编译时警告.您可以在MSDN上下载代码合同,在那里您也可以找到文档.它仅与Visual Studio的非Express版本集成,由Microsoft编写.它将检查方法调用是否可能符合您指定的合同.您的代码将变为:
using System.Diagnotistics.Contracts;
public Student(string firstName, string lastName, double grade)
: base(firstName, lastName)
{
#region Contract
Contract.Requires<ArgumentOutOfRangeException>(grade >= 2.00);
Contract.Requires<ArgumentOutOfRangeException>(grade <= 6.00);
#endregion
this.FirstName = firstName;
this.LastName = lastName;
this.Grade = grade;
}
Run Code Online (Sandbox Code Playgroud)