第三天--里氏转换原则、多态、抽象

1、自动属性的复习
可以自己写一个属性和一个自动属性,然后用反编译工具查看:将它们进行比较
自动属性只能针对标准的get,set直接访问字段,为字段赋值

类内部也可以定义类,但所定义的类只能在内部使用。

======================================================
2、让找到的对象做事,就是调用对象的方法
类.对象名=new 对象();
类.方法();
在代码中描述对象(特征、行为)
特征:属性
行为:方法
都是用点来使用
=================================================
3、计算器复习


main方法中只做3件事:
1、找到计算器对象
2、输入数字
3、计算

计算器类
//字段

//方法
构造方法
要有两个构造方法:其中一个为空的,通过属性来赋值;
 另一个有参数的通过构造函数来赋值
计算的方法
switch(oper)
{

case “+”:res=dNum1+dNum2;break;
case “-”:res=dNum1+dNum2;break;
case “*”:res=dNum1+dNum2;break;
case "/": res=dNum1+dNum2;break;
default:break;
}

添加属性的快捷方法(ctrl+r+e再按两下回车)
凡是有static修饰的方法可以直接由类名点出来



=================================================
4、 里氏转换原则
使用里氏转换原则可以统一调用
每一次使用各个成员的方法的时候都需要判断,强转

?能不能不强转,直接使用pp[i].sayHello()

做到的方法:
隐藏基类的方法:在父类中提供一个与子类完全相同的方法(但是不能是重载)

当子类与父类有相同方法的时候,new一个对象执行的是父类还是子类的方法看类型;
这可能会在编译的时候子类的方法发生警告,这时可以在声明子类的时候添加一个new

继承存在,并保证子类与父类有相同的方法
在父类方法前加上virtual
在子类方法前加上override

隐藏基类方法,根据类型决定调用什么方法
重写基类方法,无论什么类型调用新的方法(子类重写的那个方法)



5、 C#是类型安全的语言
什么类型的数据,只能赋值给什么类型的变量
什么类型,只能访问该类型的成员(通过点)

6、 is用来判断对象是否可以进行转化
语法
变量(对象) is 类型
如果对应的变量可以转化为右边的类型,那么整个表达式为true
如果不能转化就是false

7、 this与base
this
区分类的成员
子类中使用this描述父类成员的时候一样可行(继承)
此时写base与this是等价的(方便开发是分清楚变量)
调用本类构造方法
在很多情况下,构造方法都是为字段赋初值的
由于实现的功能不同,那么赋值的时候,可能不一定完全相同

base
区分类的成员
调用父类构造方法
 
//this和base 还是不怎么明白
(1)如何指定调用构造方法(根据参数重载)
(2)语法






=====================================================

8、多态----就是一个调用,多种实现
隐藏、重写

不但可以不因为没有这个方法而出错,还可以自定义这个方法

is和as运算符
is 判断是否符合
as 
子类 f;//f是一个父类的变量,或者其他变量
if(f is 子类)
{
z = (子类)f;
}
else
{
z = null;
}
====================================================
子类 z = f as 子类;


9、抽象方法
使用时刻
不知道方法怎么实现
方法不需要实现
public abstract 返回类型 方法名();

抽象方法必须使用与抽象类中
abstract class 方法名
{
public abstract 方法名();不用写方法体
}

抽象方法就是为了实现多态的,所以子类必须重写父类的抽象方法
public override 父类提供的方法名()
{
//正常方法
}
但是如果子类也是抽象额,就可以不重写父类的方法;



10、抽象类
类前带有abstract的类
是对一类事物或对象的抽象,它统一了一类对象
抽象类当中有哪些成员?
抽象成员
方法、属性、索引、事件声明
非抽象成员(与正常类一样)

怎么使用抽象类?
抽象类就是为了实现多态的
抽象类不能实例化(不能new)
抽象类中可以有构造函数(给非抽象成员初始化)

抽象属性
抽象属性与自动属性很像,但是本质不同
自动属性,后台会有一个字段生成,系统会自动的添加对应的方法体
抽象属性,是因为没有方法体,所以get、set中什么都没有;
结果的不同


11、产生随机数的方法
random r=new random();
int res=r.Next();

->r.Next()
->r.Next(num)0到num之间的随机数,取不到num
->r.Next(min,max)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值