1.继承:
1>子类继承父类 就继承父类的共有成员的方法
2>如果子类中有和父类同名的方法 那么在执行过程中会优先执行子类的方法
2.base 关键字:(用于无参构造,直接跳转this参数)
无参构造不管有没有用 建议都写上
3.(面试) 值类型和引用类型的区别
1>值类型再栈中引用类型的数据再内存堆中 而栈中保存了引用类型数据在堆中的地址
2>值类型继承自System.valueType引用类型继承自System.object
3>System.valueType间接的继承自System.object
4>值类型存储数据快,引用类存储速度慢
4.转化(强制转化 隐士转化)
1>//值类型和值类型之间的转化 //类型转化
//小范围转大范围是隐式类型转化
int num1 =100;
long num2 =num1;
//大范围转小范围是强制类型转化
long num3 = 1;
intnum4 = (int)num3;
2>(面试) //引用类型和值类型之间的转化 装箱拆箱操作
//object类是所有类的父类 值类型继承自ValueType +
//值类型也间接的继承制object类
intnumber1 = 100;
objectnumber2 = 2000;
object stu = newStudent();
object arr = newint[5];
object stuArr= newStudent[7];
Console.WriteLine(stu);
Console.WriteLine((int)number2 + number1);
3>//引用类和引用类型之间的转化 里氏转化
//将子类转化成父类 向上转型
Animal anim =newDog("狗");
anim.Shout();
//将父类转化成子类 向下转型
Dog dog1 =(Dog)anim;
dog1.Shout();
7.三参的输入与输出
5.面试 is/as
*is是做了一次判断 返回结果是一个bool类型的值 如匹配返回true 否则返回false
* is只做判断 并没有强制转化
* as 是直接将类型转化 如果转化成功 则将父类转化子类 否则返回null
* as 再盘对岸的时候就直接转化了
for (int i = 0; i < animals.Length; i++)
{
判断aniamal[i]是否是Dog类型
//if (animals[i] is Dog)
//{
// //如果是Dog类型则使用向下转型
// ((Dog)animals[i]).Shout();
//}
//else if (animals[i] is Cat)
//{
// ((Cat)animals[i]).Shout();
//}
Dog dog =animals[i] asDog;
if (dog!=null)
{
dog.Shout();
}
Cat cat =animals[i] asCat;
if (cat!= null)
{
cat.Shout();
}
}