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

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)

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...