一. 静态方法,静态类 (static)
静态和非静态区别
- 在非静态类(public class)中,既可以有实例成员,也可以有静态成员(static)
- 实例函数中,即可使用静态成员,也可以使用实例成员。
- 静态类中只允许有静态成员,不能有实例成员。
- 静态成员必须使用类名调用,实例成员使用对象名调用
- 静态函数中,只能访问静态成员。
- 静态类 ---> 工具类 静态类在整个项目中资源共享 (存在“静态存储区域”)
总结理解:
- 静态方法和OC中类方法类似,但是却多了静态类和静态变量的概念。只能用类名调用。统一用static限制,VIP级别。
- 非静态类(public class),非VIP级别,什么人都有。
- 由于静态类资源共享,所以静态类也相当于单例。
二. 构造函数
- 构造函数可以重载
- this
- 代表当前类的对象
- 在类中显示调用本类的构造函数 语法 :this
三. 字符串方法
- Length 长度
- ToUpper() :将字符串转换成大写形式
- ToLower(): 将字符串转换成小写形式
- Equals(string2,StringComparison.OrdinalIgnoreCase): 比较两个字符串是否相等,可以忽略大小写
- Split 分割字符串,返回字符串类型的数组
string s = "ab ddfg _ f + = skksks ,,, fdf";
//分割字符串用Split
char[] chs = {' ','_','+','=',','};
string[] str = s.Split(chs,StringSplitOptions.RemoverEmptyEntries);
Console.ReadKey();
//结果是"abddfgfskksksfdf";
- string Replace(string oldValue, string newValue) 字符串替换
- string Substring(int startIndex) 字符串截取,从starIndex开始截取到最后
- string Substring(int startIndex, int length) 字符串截取,从starIndex开始截取length 长度的字符串
- bool Contains(string value)判断是否包含
- bool StartWith(string value) 判断字符串是否以字符串value开始
- bool EndWith(string value) 判断是否以value结尾
- int IndexOf(string value) 去value第一次出现的位置
- LastIndexOf
- Trim() 去空格,前后都去
- TrimEnd() 去掉结尾的空格
- TrimStart() 去掉前面的空格
- IsNullOfEmpty() 判断是不是空字符串或者null
- Int IndexOf(string value, int startIndex)
四. 集合类型
1. ArrayList (数组)
- list.Sort(); 升序排列
- list.Reverse(); 反转排列
- list.Clear()
- list.Insert(1,"插入的")
- list.InsertRange(0,new string[] {"zhangsan","lisi"});
- list.Remove("123");
- list.RemoveAt(0); //根据下标删除元素
- list.RemoveRange(0,3);
- bool b = list.Contains("123");
- list.Add();
- list.AddRange(); //添加集合元素
- list.Count 实际包含个数
- list.Capacity 可包含个数,容量
2. Hashtable
- var: 根据值推断类型,在声明的时候必须给变量赋值。
五. 泛型集合
-
泛型集合 集合中内容的类型确定,长度可变
-
List< int>, Dictionary< int, string>
//创建泛型集合对象 List<int> list = new List<int>(); list.Add(1); list.Add(2); list.AddRange(list); //集合转数组 int[] nums = list.ToArray(); //数组转集合 List<int> listTow = nums.ToList(); //字典 Dictionary<int, string> dic = new Dictionary<int, string>(); dic.Add(1, "liujing"); dic.Add(2, "xuzheng"); dic.Add(3, "lisi"); dic[1] = "xinlaide"; foreach (KeyValuePair<int, string> item in dic) { Console.WriteLine("{0}-------{1}",item.Key,item.Value); }
六. 文件操作
1. Path 路径
string str = @"C:\3000soft\Red Spider\Data\Message\老赵.wav";
//获得文件名
Console.WriteLine(Path.GetFileName(str));
//获得文件名但不包含扩展名
Console.WriteLine(Path.GetFileNameWithoutExtension(str));
//获得文件的扩展名
Console.WriteLine(Path.GetExtension(str));
//获得文件所在的文件夹的名称
Console.WriteLine(Path.GetDirectoryName(str));
//获得文件所在的全路径
Console.WriteLine(Path.GetFullPath(str));
//连接两个字符串作为路径
Console.WriteLine(Path.Combine(@"c:\a\"),"b.txt");
2. File 文件
//创建一个文件
File.Create(@"C:\Users\xuzheng\new.txt");
//删除一个文件
File.Delete(@"C:\Users\xuzheng\new.txt");
//复制一个文件
File.Copy(@"C:\Users\xuzheng\new.txt", @"C:\Users\xuzheng\code.txt");
//移动文件(剪切)
File.Move(@"C:\Users\xuzheng\new.txt", @"C:\Users\xuzheng\code.txt");
//读取数据
byte[] buffer = File.ReadAllBytes(@"C:\Users\xuzheng\new.txt");
string s = Encoding.GetEncoding("GB2312").GetString(buffer);
Console.WriteLine(s);
Console.ReadKey();
//写数据
string str2 = "今天天气好晴朗,处处好风光";
//需要字符串转换成字节数组
byte[] buf = Encoding.Default.GetBytes(str2);
File.WriteAllBytes(@"C:\Users\xuzheng\code.txt", buf);
//以行的形式进行读取
string[] contents = File.ReadAllLines(@"C:\Users\xuzheng\new.txt", Encoding.Default);
foreach (string item in contents)
{
Console.WriteLine(item);
}
Console.ReadKey();
//读取文本文件
string str = File.ReadAllText(@"C:\Users\xuzheng\new.txt", Encoding.Default);
Console.WriteLine(str);
//写文件
//分行写
File.WriteAllLines(@"C:\Users\xuzheng\nnn.txt",new string[]{ "abc","dde"});
Console.WriteLine("写入OK");
//整个写
File.WriteAllText(@"C:\Users\xuzheng\nnb.txt","shdhisnsndkl涉及到法律你是就快速打开包括说不定吧");
//追加
File.AppendAllText(@"C:\Users\xuzheng\nnb.txt", "+jhiuabdjk");
Console.WriteLine("OK");
Console.ReadKey();
//file类只能读取小文件,因为他读取的方式是全部一下都读进来
3.文件流 FileStream (用的时候去🔍)
//读取文件
using (FileStream fs= new FileStream(@"C:\Users\xuzheng\Desktop\111.txt",FileMode.OpenOrCreate,FileAccess.Read))
{
//每次读取多少数据
byte[] buffer = new byte[1024*1024*5];
//读取 返回实际读取到的大小
int r = fs.Read(buffer, 0, buffer.Length);
//转成字符串
string s = Encoding.Default.GetString(buffer, 0,r);
Console.WriteLine(s);
}
Console.ReadKey();
//写入数据
using (FileStream fsWrite = new FileStream(@"C:\Users\xuzheng\Desktop\123.txt",FileMode.Append,FileAccess.Write))
{
string s = "今天天气好清凉";
//转成字节数组
byte[] buffer = Encoding.Default.GetBytes(s);
//写入
fsWrite.Write(buffer, 0, buffer.Length);
}
Console.ReadKey();
//使用 StreamReader 读取数据
using (FileStream fsRead = new FileStream(@"C:\Users\1234.txt",FileMode.OpenOrCreate,FileAccess.Read))
{
using (StreamReader sr = new StreamReader(fsRead, Encoding.Default))
{
while(!sr.EndOfStream)
{
Console.WriteLine(sr.ReadLine());
}
}
}
Console.ReadKey();
//使用 StreamWriter 写入数据
byte[] buf = new byte[1024 * 1024 * 5];
using (StreamWriter sw = new StreamWriter(@"C:\Users\1234.txt",true,Encoding.Default, buf.Length))
{
sw.WriteLine("fdghjkl");
}
Console.ReadKey();
4. Directory (目录) 文件夹操作
//创建一个文件夹
Directory.CreateDirectory(@"C:\a");
//删除文件夹
Directory.Delete(@"C:\a", true);
//剪切文件夹
Directory.Move(@"C:\a",@"C:\Users\xuzheng\Desktop");
//获取指定文件夹下所有文件的全路径
Directory.GetFiles(@"C:\Users\xuzheng");
//获取指定文件夹下所有指定后缀文件的全路径
Directory.GetFiles(@"C:\Users\xuzheng","*.jpg");
//h获取指定目录下所有文件夹的全路径
Directory.GetDirectories(@"C:\Users\xuzheng");
//判断指定的文件夹是否存在
bool shi = Directory.Exists(@"C:\User\xuzheng\Desktop\aaa");
七. 继承
- public class Student: Person
- public void Student(string name):base(name)
- new 关键字 彻底隐藏父类中的同名方法
- 里氏转换 is 表示类型转换,如果能够转换成功,返回true
- as 表示类型转换,如果能够转换成功,则返回对应对象,否则返回null
- protected(受保护的)关键字,子类和父类可以访问父类的属性,其他类不行。
- 类不允许多继承(单根性),想要多继承的时候可以用接口。
八. 多态
1.虚方法 virtual override
- virtual:(虚拟),虚方法关键字,在父类需要多态使用的方法前使用。
- override: (覆盖),子类重写父类的虚方法,与virtual相互照应。
2.抽象类 abstract
- abstract 标记抽象类(父类)和抽象方法,
- 抽象方法没有方法体,子类去实现。
- 抽象类不能被实例化。
- 抽象类里可以写虚方法(virtual)
3.接口 interface
- 语法 [public] interface I...able
- 接口中的成员不能添加访问修饰符,默认就是public
- 不允许写具有方法体的函数
- 接口中只能有方法
- 接口和接口之间可以多继承,类是单根性所以只能单继承,但是类可以继承多个接口。
网友评论