Length可以拿到字符串数组的长度;
保留小数:
{0:0.00}. —>输出两位小数;
string s=avg.ToString (“0.00”). //将小数转换为字符串,保留两位
avg=Convert.ToDouble(s)。 //将字符串格式重新转为double格式
Console.clear();清屏
面向过程:为每个对象量身定做(都不同)
面向对象:找个对象帮你做事(通用)
对象「属性,方法」==「特征,行为」
this 表示当前类的对象
普通类不占用内存,对象占内存,静态类占内存;
静态和非静态的区别:
1.在非静态类中可以有实力成员,也可以有静态成员
2.调用实例成员的时候需要使用对象名。实例成员();
3.调用静态成员的时候需要使用类名。静态成员;
静态成员必须使用类名去调用
实力成员使用对象去调用
静态函数中,只能访问静态成员,不允许访问实例成员
实例函数中既可以使用静态成员,也可以使用实例成员
4.静态类中只允许有静态成员,不能创建实例对象
静态类不能创建对象,不能实例化
使用:
1.如果想要你的类当作一个“工具类”去使用,这个时候可以考虑将类写成静态的
2.静态类在整个项目中资源共享(只有在程序全部结束之后,静态类才会释放资源)
静态存储区域
C#中的资源回收机制:GC—-Garbage Collection —垃圾回收器
构造函数:初始化对象
名称跟类名一样
创建对象时调用构造函数
new关键字:在内存中开辟一个空间
在开辟的空间中创建对象
调用对象的构造函数进行初始化对象
构造函数可以重载
析构函数:当程序结束时调用,用于帮助释放资源
命名空间:
用于解决类的重名问题
可以看作是类的文件夹
类是属于命名空间的
如果当前项目中没有这个类的命名空间,需要我们手动的导入这个类所在的命名空间
1.用鼠标去点
2.alt+shift+F10
3.记住命名空间,手动去引用
在一个项目中引用另一个项目的类
1.在右侧文件处添加引用
2.引用命名空间
字符串的不可变性:
在给字符串重新赋值后,原来的值并未被改变,在堆中开辟了一个新的空间,存放新值,改变的是栈中的指向地址
string类型可以看作是char类型的一个只读数组
ToCharArray(); //将字符串转换为char数组
New string (char[] chs)。 //将char数组转换为字符串
StringBuilder :用于处理大量的字符串数据
ToUpper();转换为大写
ToLower();转换为小写
If(lesOne.Equals(lesTwo,StringComparison.OrdinalgnoreCase))
//比较字符串lesOne和lesTwo,忽略大小写
split():分割字符串
String s=“s a - + = stt”; //定义字符串
char[] chs-{' ','-','+','='}; //定义需要除去的字符,需要char数组定义单个字符
string[] str=s.Split(chs); //定义str数组接受
//Split(chs)将chs中定义的字符分割,变为空,占用位置
string []str=s.Split(chs,StringSplitOptions.RemoveEmptyEntries)
//优化分割后的字符串,可以去除空字符
str.Contains("aa"); //判断字符串str中是否包含"aa",返回bool值
str.Replace("aa","**"); //将字符串中的"aa"替换为"**"
str.Substring(1); //从指定索引处开始截取,包含制定索引
str.Substring(1,5); //可指定结尾位置
str.Endswith("a"); //判断字符串是否以"a"结尾,返回bool值
str.Startswith("b"); //判断字符串是否以"b"开头,返回bool值
str.Indexof('天') //取出'天'字符在字符串中第一次出现的位置的索引,返回int值
str.Indexof('天',n); //从索引n处开始查找'天'找不到返回-1
str.LastIndexof('天'); //查询字符串中最后一次出现'天'的位置的索引
str.Trim(); //去掉字符串前后的空格
str.TrimStart(); //去掉字符串前面的空格
str.TrimEnd(); //弃掉字符串后面的空格
String.TsNullorEmpty(str) //判断字符串是否为空或者Null
String[]names={"张三","李四","王五","赵六"}
String str=String.Join("|",names);
//用join将制定分隔符插入字符串数组中,生成一个新的字符串
File.ReadAllLines(Path)
继承
子类并没有继承父类的构造函数,但是子类会默认的调用父类的无参数的构造函数创建父类对象,让子类可以使用父类中的成员
所以,如果在父类中重新写了一个有参数的构造函数之后,那个无参数的构造函数就被干掉了,子类就调用不到了,所以子类就会报错
解决方法:
1.重新写一个无参数的构造函数
2.使用:base()关键字继承父类的有参数构造函数
Public Student(String name,int age,char gender,int id)
:base(name,age,gender)
{}
Object类是所有类的父类;
new关键字:
1.创建对象
2.隐藏从父类那里继承过来的同名方法(隐藏后就访问不到父类的同名方法了)
里氏转换:
1.子类可以赋值给父类(如果一个地方需要一个父类作为参数,我们可以传一个子类代替)
2.如果父类中装的是子类对象,那么可以将这个父类强制转换为子类对象
(Person p=new Student();)。 --用子类赋值给父类
(Student ss=(Student)p)。 --强制转换
is:表示类型转换,如果转换成功,则返回一个true,否则返回一个false
if(p is Teacher)。 --判断p是否是Teacher对象
as:表示类型转换,如果能转换则返回对应的对象,否则返回null
Teacher t= p as Teacher。 -- 判断是否能转换
protected访问修饰符:不允许其他非子类访问
.GetType() --> 拿到变量类型
var 推断类型,声明var变量时必须给他赋值
Stopwatch 记录程序运行的时间
键值对集合中键必须时唯一的,而值无所谓
文件编码:ASC--ASCII--GB2312--Big5--unicode--UTF-8
乱码:
产生乱码的原因,保存这个文件所采用的编码跟打开这个文件所采用的编码不一致
byte[] buffer =Encoding.Default.GetBytes(str);//将str转换为字节数组
String[] str=File.ReadAllLines(@"路径",编码格式)//按行读取,返回的是字符串数组
File.ReadAllText//整个文件读取,返回的是一个字符串
按行读取和按文件读取只能读取文本文件
Write方法会覆盖原本的内容
File.AppendAllText// Append写入会追加在后面
装箱和拆箱:
装箱:将值类型转换为引用类型
拆箱:将引用类型转换为值类型
看两种类型是否发生了装箱或拆箱,要看这两种类型是否存在继承关系
多态:一个类型多种状态
目标:将变化封闭
实现多态的三种方法:虚方法,抽象类,接口
虚方法:virtual-override
抽象类:abstract
如果父类中的方法有默认的实现,并且父类需要被实例化,这时,可以考虑将父类定义成一个普通类,用虚方法来实现多态
如果父类中的方法没有默认实现,父类也不需要被实例化,则可以将该类定义为抽象类
WebBrowser:浏览器空间 url
ComboBos:下拉框控件