一. 继承
语法:
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.静态成员特点
![v2-a7a29186a9d0f5799c9fc275bd06465b_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/21ac9732f245a64e10ec7b5c9593ec82.jpeg)
静态成员变量要使用"类对象"调用
例子:
//声明时:
public static int stuCount;
//调用时:
Console.WriteLine(Student.stuCount);
3 静态构造函数
类初始化时,会执行(仅)一次静态构造函数,来生成静态成员变量
![v2-b18706a4d5a76c6b2b36169e3fb4e7ce_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/e60986cc2c719d386e96fbe9c1987fd1.jpeg)
4. 静态方法
public static void fun1(){}
//所有实例对象其实都在引用同一个方法,这个方法存在类的静态区,此时实例对象把自己隐式传递给此方法.
//类对象也可以调用 静态方法 但不能访问实例成员.(此时静态方法引用时创建实例对象了吗?)
![v2-26215dc52d49882316874c2078919f0c_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/b3f5163049db34314acf07f94c1ed6dc.jpeg)
5.静态类
![v2-27bdf3addf0e05d153cf8cdf650265eb_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/f3dc175d6581ccf40e934496096e6306.jpeg)
6.静态的利与弊
![v2-a1ff18e4f6268f6cf560aa779331fe9e_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/2b0bed656b5b0100f1a62f69410c359a.jpeg)
三.泛型集合(列表)
需要
泛型集合可简单相当于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
![v2-b07df7813517f4655bff81725287aeed_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/415fab392a3abda86e986ae22f9b5422.jpeg)
2. 定义结构体:
![v2-4a05f39743eb3ad7f57654e4d1e14987_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/3af6d79fb4a6997edabef6c237237b3f.jpeg)
3. 结构体构造函数
![v2-817781e2ad7a711886dc07f295e6baa8_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/18d8397cb7ec607608a3dccfa967e4c6.jpeg)