11.12 c#

一、重载和重写
重载:在同一个类中,方法名相同,方法的参数不同(个数或者类型)的方法。
重写:1.发生在父类与子类之间,重写(override)是面向对象的概念。
2.方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同
3.访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常
5.为什么重写:通常,子类继承父类的方法,在调用对象继承方法的时候,调用和执行的是父类的实现。但 是,有时候需要对子类中的继承方法有不同的实现方式。
6.如何重写:a.重写父类的方法要用到override关键字(具有override关键字修饰的方法是对父类中同名方法的新实现)。
                     b.要重写父类的方法,前提是父类中该要被重写的方法必须声明为virtual、override或者是abstract类型,不能重写static方法和非虚方法。
                     c.virtual关键字用于将方法定义为支持多态,有virtual关键字修饰的方法称为“虚拟方法”(虚方法)。
区别:重载实现于一个类中;重写实现于子类中。

二、字符串格式化

每个对象都有一个ToString方法用来返回这个对象的字符串形式的呈现。ToString方法能接收一个字符串参数,告诉对象怎样格式化它自己。 String.Format的调用中,格式化字符串放在后面的位置,例如“{0:##}”。大括号里的文本是{index[,alignment][:formatString]}。如果alignment是正的,则文本在给出文本空间中右对齐。如果alignment是负的,则左对齐。
使用方式1: xxx.ToString(xxxx)
使用方式2:string.Format(xxxx,xxx)

三、动态类型

1. 什么是动态类型?
C#是一种静态类型的语言,使用静态类型的好处是C#编译器可以在编译时检查大部分的工作,能够找出更多的错误,使程序更加健壮。
优先使用静态类型,静态类型比动态类型更高效,动态类型和在运行时创建表达式树都会带来性能上的影响。
C#中的动态类型只是给你一种解决数据类型的一种方案,主要是与使用动态类型的环境进行交互使用的。
2.动态类型基本语法
在C#中,动态类型使用dynamic关键字表示,动态类型是在运行时解析,与var推断类型是完全不一样的,var还是静态类型,可推断出类型。
3. 方法返回动态类型
C#中的dynamic动态类型是可以作为方法的返回类型存在的。

四、base、this关键字

Base关键字,主要是应用于类的继承,可以在子类的构造函数、方法、属性实例属性中引用父类中的公有(public)有以及受保护(protected)的 方法、字段、属性、索引器等。关键字用于从子类中访问父类成员。即使父类的方法在子类中重写,仍可以使用base关键字调用。
this关键字,主要是引用当前实例或者继承的方法。
对于多层继承的情况:
若存在重载:base指向直接继承的父类的重载的方法、字段等;即 Line 53
若不存在重载:base指向任意层父类的方法、字段等。即 Line 53 base.PropertyA

五、接口

接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同 "是什么" 部分,派生类定义了语法合同 "怎么做" 部分。
接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构。
接口使得实现接口的类或结构在形式上保持一致。接口命名通常以 I 字母开头,例如Itest。
抽象类在某种程度上与接口类似,但是,它们大多只是用在当只有少数方法由基类声明由派生类实现时。
接口本身并不实现任何功能,它只是和声明实现该接口的对象订立一个必须实现哪些行为的契约。
抽象类不能直接实例化,但允许派生出具体的,具有实际功能的类。
接口成员,不允许使用 public、private、protected、internal 访问修饰符,默认为public,不可自己书写。不允许使用 static、virtual、abstract、sealed 修饰符。不能定义字段,定义的方法不能包含方法体。

六、接口和抽象类的区别

1、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。
2、抽象类要被子类继承,接口要被类实现。
3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现
4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。
6、抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果
7、抽象类里可以没有抽象方法
8、如果一个类里有抽象方法,那么这个类只能是抽象类
9、抽象方法要被实现,所以不能是静态的,也不能是私有的。
10、接口可继承接口,并可多继承接口,但类只能单根继承。

 

posted @ 2021-11-12 23:23  木月浅  阅读(50)  评论(0)    收藏  举报