Console.WriteLine(list[i]);
Console.WriteLine();
}
publicstaticvoidMain()
{
UseParams(1,2,3,5);
UseParams2(1,'a',"test",true,false);
int[]myarray=newint[5]{10,11,12,14,16};
UseParams(myarray);
//Console.ReadLine();
}
}
运行以上函数,并分别改变调用UseParams()函数的参数的个数;对于UseParams2()函数,改变数据类型及个数;改变myarray数组元素的个数;
将结果截屏输出。
(4)带ref和out参数的函数的练习
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceConsoleApplication5
{
classProgram
{
staticvoidMain(string[]args)
{
inti=0;
Console.WriteLine("Originalvalueofi:
\t"+i);
Console.WriteLine("nowcallingacommonfunction");
CommonFunctin(i);
Console.WriteLine("nowthevalueofi:
\t"+i);
//asoutpara,hasnovalueinitialize
Console.WriteLine("nowcallingaoutfunction");
OutFunction(outi);
Console.WriteLine("nowthevalueofi:
\t"+i);
Console.ReadLine();
//asrefpara,hasvaluebefore
Console.WriteLine("nowcallingareffunction");
RefFunction(refi);
Console.WriteLine("nowthevalueofi:
\t"+i);
Console.ReadLine();
}
staticvoidOutFunction(outinti)
{
i=100;
}
staticvoidRefFunction(refinti)
{
i=200;
}
staticvoidCommonFunctin(inti)
{
i=999;
}
}
}
观察参数i在运行上述三个函数后的变化情况,给输出的截屏并解释结果。
实验报告
学院:
计算机与信息学院专业:
软件工程年级:
2008
姓名:
学号:
实验室号:
田312/313计算机号:
实验日期:
2010年5月7日指导教师签字:
成绩:
报告退发(订正、重做)
实验六结构、类、封装
1、实验目的
正确理解结构与类、封装等概念;
正确使用理解简单数值类型与引用类型。
2、实验仪器(环境):
计算机及VisualStudio.NETC#
3、实验操作方法:
了解和熟悉.NETC#IDE(集成开发环境)的使用方法,输入程序,对程序进行编译、调试和运行。
4、报告内容:
(1)值类型和引用类型的关系
usingSystem;
classDemo
{
publicstaticvoidMain()
{
intx=123;
objectobj1=x;//这种操作称为装箱操作,把一个值类型转换成引用类型
x=x+100;
Console.WriteLine("x={0}",x);//值类型
Console.WriteLine("obj1={0}",obj1);//引用类型
}
}
运行上述程序,观察x和obj1的变化。
上述是一个把值类型包装成引用类型的处理过程(装箱操作)。
当一个值类型被要求转换成一个object对象时,装箱操作自动进行,它首先创建一个对象实例,然后把值类型的值复制到这个对象实例,最后由object对象引用这个实例。
usingSystem;
classDemo
{
publicstaticvoidMain()
{
intx=123,y;
objectobj1=x;//装箱操作
x=x+100;//改变x的值,此时obj1的值并不随之改变
y=(int)obj1;//拆箱操作,必须进行强制类型转换
Console.WriteLine("x={0}",x);
Console.WriteLine("obj1={0}",obj1);
}
}
运行上述程序,观察x和obj1的变化。
上述是将object类型转换成值类型。
首先检查由object引用的对象实例值类型的包装值,然后把实例中的值拷贝到值类型的变量y中。
(2)Time类的构造函数及其重载
usingSystem;
publicclassTime
{
privateinthour,minute,second;
publicTime()
{
hour=minute=second=0;//可以这样写,但按所学规范要求比较好
}
publicTime(inth)
{
hour=h;
minute=second=0;//可以这样写,但按所学规范要求比较好
}
publicTime(inth,intm)
{
hour=h;
minute=m;
second=0;
}
publicTime(inth,intm,ints)
{
hour=h;
minute=m;
second=s;
//Console.WriteLine("hour={0},minute={1},Sum={2}",h,m,s);
}
}
classtest
{
publicstaticvoidMain()
{
Timet1,t2,t3,t4;//对t1,t2,t3,t4分别调用不同的构造函数
t1=newTime();
t2=newTime(8);
t3=newTime(8,30);
t4=newTime(8,30,30);
}
}
运行上述程序,谈谈自己对构造函数的认识以及对其参数的初始化的理解;
(3)Finalize函数练习
usingSystem;
publicclassPoint
{
privateintx,y;
~Point()//前门加~表明是析构函数
{
Console.WriteLine("Point的垃圾处理器");
}
}
publicclassCircle:
Point
{
privatedoubleradius;
~Circle()
{
Console.WriteLine("Circle的垃圾处理器");
}
}
classTest
{
publicstaticvoidMain()
{
Circleb=newCircle();
b=null;
GC.Collect();
GC.WaitForPendingFinalizers();
//Console.Read();
}
}
运行上述程序,对于GC.Collect()、GC.WaitForPendingFinalizers()函数的作用查帮助系统。
理解该程序的作用并写出自己的理解。
(4)使用属性来访问字段
usingSystem;
//SafePerson结构使用属性来公开对age字段值的访问
publicstructSafePerson
{
privateintage;
publicintAge
{
get
{
returnage;
}
set
{
if(value>=0)
{
age=value;
}
else
{
thrownewArgumentOutOfRangeException(
"Agemustbegreaterthanorequaltozero");
}
}
}
}
//UnsafePerson结构将age字段直接暴露在外
publicstructUnsafePerson
{
publicintAge;
}
publicclassProgram
{
publicstaticvoidMain()
{
SafePersonsafePerson;
UnsafePersonunsafePerson;
safePerson.Age=-3;//将会引发异常
unsafePerson.Age=-3;//不会有任何提示
}
}
上述代码中为什么safePerson.Age=-3;将会引发异常而unsafePe