一. 继承
语法:
public class Student:Person
注意:
- 子类无法使用父类的 private 变量;可以使用父类 protected 声明的变量子类可以用
- 声明父类,可以赋值任何子类 但自能使用父类参数和方法 如果想用子类,应该强制类型转换;
- 父类对象强转子类不会编译报错,但存在异常的风险
- 如果想强转但不抛出异常,可以: 父类对象 as 子类; 转换成功返回子类对象,失败返回null
//例如:
Person per1=new Student();//声明父类,指向子类
Student stu1=(Student) per1;//此强转没问题
Teacher tea1=(Teacher) per1;//此强转运行中会抛出异常
//如果不想抛出异常可以
Teacher tea2= per1 as Teacher;//此写法不会抛出异常,如果强转不成功,则对象赋值为null;
if (tea2!=null){ // 所以,可以判断一下强转是否成功
//此处写强转成功的处理代码
}
二.静态成员变量 static
1.语法: public static int stuCount;
调用时: Student.stuCount;//用类对象调用
(相当于:类的静态区空间中的变量)
2.静态成员特点
静态成员变量要使用"类对象"调用
例子:
//声明时:
public static int stuCount;
//调用时:
Console.WriteLine(Student.stuCount);
3 静态构造函数
类初始化时,会执行(仅)一次静态构造函数,来生成静态成员变量
4. 静态方法
public static void fun1(){}
//所有实例对象其实都在引用同一个方法,这个方法存在类的静态区,此时实例对象把自己隐式传递给此方法.
//类对象也可以调用 静态方法 但不能访问实例成员.(此时静态方法引用时创建实例对象了吗?)
5.静态类
6.静态的利与弊
三.泛型集合(列表)
需要
泛型集合可简单相当于python中的列表 , 提供了增删改查的功能,相对于数组更灵活了;
语法:
using System.Collections;
using System.Collections.Generic;
List<Student> students1 = new List<Student>();
//其实质还是一个数组,但内部整合了一些灵活的方法,对长度要求没那么苛刻了,也减少了垃圾
students1.Add(stu1);
students1.Add(stu2);
students1.Add(new Student());
students1.Insert(2,new Student());
students1.RemoveAt(2);
students1.Remove(stu2);
Student stu3=students1[1];
int length=students1.Count;//列表长度
students1.ToArray(); //转为数组
四.字典集合
相当于python中的字典 键值对组合
语法:
using System.Collections;
using System.Collections.Generic;
Dictionary<string ,Student> studentDic=new Dictionary<string,Student>();
//声明字典
studentDic.Add("Anny",new Student("anny",18)); //按照键值对赋值
stu1=studentDic["Anny"]; //按键取值;
五. 结构体
- 结构struct
2. 定义结构体:
3. 结构体构造函数