c#课后小试3
1.静态类
namespace ConsoleApplication2
{
class Program
{
public class myClassA
{
int shuju;
public myClassA()
{
shuju = 0;
Console.WriteLine("调用构造函数A");
}
~myClassA()
{
Console.WriteLine("调用析构函数A");
}
}
public class myClassB :myClassA
{
int shuju;
public myClassB(int q)
{
shuju = q;
Console.WriteLine("调用构造函数B");
}
~myClassB()
{
Console.WriteLine("调用析构函数B");
}
}
static void Main(string[] args)
{
myClassB b = new myClassB(5);
}
}
}
结果为
同时了解到继承时自上而下,析构时自下而上。
3.参数传递
传递参数时,与c++类似,有值传递和引用传递。传递时什么都不加,为值传递,实际的数据并未改变。引用传递与c++不同,参数前加ref,out.其中out不用初始化数据。
public void GetTime(int h, ref int m, out int s )
{
h = 12;
m = 34;
s = 56;
}
…h1=0;m1=0;
GetTime(h1, ref m1, out s1 );
… h1=0;m1=34;s1=56;
4.封装
用以下代码尝试
class Program
{
public class myClass
{
private int myProperty ;
public myClass(int q)
{
myProperty = q;
}
public int MYPROPERTY
{
get { return this.myProperty; }
set { this.myProperty = value; }
}
}
static void Main(string[] args)
{
myClass a=new myClass(1);
Console.WriteLine(a.MYPROPERTY);
a.MYPROPERTY = 8;
Console.WriteLine(a.MYPROPERTY);
Console.Read();
}
}
结果 1
8
可以看出,封装成功。成功的用poperty调用修改private类型的数据。
5.继承和多态
与c++中有区别,首先是在子类重写函数时要在函数名前加 override.
另外,c#中有new的问题。
存在new时,如果所用实例是new对应类的类型,则调用该类父类的相关函数。
对于override,所用实例属于什么类,就调用所在类的相关函数。