//代码核心:
//1.通过属性Age访问私有字段_age
//2.设计异常处理(溢出,非数字字符串,年龄范围异常,其它异常)
//3.自己定义一个异常类,继承FormatException异常类
using System;
public class OutString
{
private int _age; //1.定义一个私有字段,限制类外面访问
public int Age //2.定义一个公有属性,对私有字段进行访问并提供灵活控制
{
get //3.取值访问器
{
return this._age;
}
set //4.赋值访问器
{
if(value<=0 || value>=150) //5.使用属性提供的赋值访问器进行控制,set{}就是个方法
{
//6.抛出异常实例
throw new AgeRangeException("年龄应该在0-150岁之间,请核对输入数据!");
}
else
{
this._age=value;
}
}
}
public class AgeRangeException:System.FormatException //7.定义一个异常类,继承系统FormatException异常类
{
public AgeRangeException():base()
{}
public AgeRangeException(string exmessage):base(exmessage)
{}
}
}
public class Demo //7.使用上面的class OutString,类做好了就是给别人用的哦
{
public static void Main(string[] args) //8.程序的入口,静态Main();
{
string CP;
while(true) //9.死循环 除非自己能合理控制否则小心使用它
{
try //10.try语句块,也是雷区
{
int tempage;
OutString OS=new OutString();
Console.Write("请输入你的年龄:");
tempage=Convert.ToInt32(Console.ReadLine());
OS.Age=tempage;
Console.WriteLine("年龄为:"+OS.Age);
}
//11.异常类层次关系Object--SystemException--SystemFormatException...
catch(FormatException FE) //根据系统FormatException异常类捕捉异常情况
{
Console.WriteLine(FE.Message);
}
catch(OverflowException OFE) //根据系统OverflowException异常类捕捉异常情况
{
Console.WriteLine(OFE.Message);
}
catch(Exception E) //根据系统Exception异常类捕捉异常情况
{
Console.WriteLine(E.Message);
Console.WriteLine("发生异常了,请与管理员联系处理!!!");
}
finally //12.finally语句块总有执行的
{
Console.Write("按Y键退出,否则重新输入");
}
CP=Console.ReadLine().ToLower(); //.最后一点,控制死循环语句
if(CP=="y")
{
break;
}
}
}
}
Try...Catch...Finally 语句专门用于结构化异常处理。
异常处理程序的try{}块包含希望错误处理程序监视的代码节。如果该代码节中的任何代码在执行期间发生错误,C#将检查Try...Catch...Finally内的每个Catch语句,直到找到条件与该错误匹配的语句。
如果找到了这样的语句,则控制转移到catch块内的第一个代码行。
如果没有找到匹配的Catch语句,则继续搜索包含发生异常的块的外部Try...Catch...Finally块的Catch语句。此过程在整个堆栈中继续,直到在当前过程中找到匹配的 catch块。
如果没有找到,将产生错误。
Finally节中的代码总是最后执行,并且刚好在错误处理块失去范围之前执行,不论Catch块内的代码是否已执行。将清理代码(如用于关闭文件和释放对象的代码)放在Finally节中。
(以上理解如有误,恳请指教!并将立即更新)