C# 面向对象与常用API的学习

来源:互联网 发布:9.3越狱软件源 编辑:程序博客网 时间:2024/06/03 22:01

本文转载连接: http://blog.csdn.net/chenrushui/article/details/52848346


一:C#中的集合ArrayList

[csharp] view plain copy
  1. using System;  
  2. using System.Collections;  
  3. using System.Collections.Generic;  
  4. using System.Linq;  
  5. using System.Text;  
  6. using System.Threading.Tasks;  
  7.   
  8. namespace 集合  
  9. {  
  10.     class Program  
  11.     {  
  12.         static void Main(string[] args)  
  13.         {  
  14.             //1)创建一个集合对象  
  15.             ArrayList list = new ArrayList();  
  16.             list.Add(1);  
  17.             list.Add(true);  
  18.             list.Add('男');  
  19.             list.Add("陈如水");  
  20.             list.Add(1.2);  
  21.             list.Add(1.2m);  
  22.             list.Add(new string[] { "陈诗悦""陈诗音" });  
  23.             list.AddRange(new int[] { 1, 2, 3, 4, 5, 6, 7, 8 });  
  24.             //删除指定的元素  
  25.             list.Remove('男');  
  26.             list.AddRange(list);  
  27.   
  28.             list.Clear();  
  29.   
  30.             //获取集合中实际的元素的个数。  
  31.             for (int i = 0; i < list.Count; i++)  
  32.             {  
  33.                 //集合中的某一个元素  
  34.                 Console.WriteLine(list[i]);  
  35.                 //我们将一个对象输出到控制台,默认打印的是这个对象所在类的命名空间。  
  36.             }  
  37.   
  38.             //集合练习题1:求集合中元素的和与平均值,最大值和最小值  
  39.             //创建一个集合  
  40.             ArrayList list1 = new ArrayList();  
  41.             //向集合中添加元素  
  42.             list1.AddRange(new int[] { 1, 3, 56, 78, 9, 0, 3, 4, 5, 7, 8, 9 });  
  43.             int sum = 0;  
  44.             int max = (int)list1[0];  
  45.             int min = (int)list1[0];  
  46.             //遍历集合  
  47.             for (int i = 0; i < list1.Count; i++)  
  48.             {  
  49.   
  50.                 //求集合里面的最大值  
  51.                 if (max < (int)list1[i])  
  52.                 {  
  53.                     max = (int)list1[i];  
  54.                 }  
  55.                 //求集合里面的最小值  
  56.                 if (min > (int)list1[i])  
  57.                 {  
  58.                     min = (int)list1[i];  
  59.                 }  
  60.   
  61.                 //把每一个元素强转成int类型 因为Object类型是int类型的父类,所以可以强转  
  62.                 sum += (int)list1[i];  
  63.   
  64.             }  
  65.             //Console.WriteLine("这几个数的和是{0},平均值是{1},最大值是{2},最小值是{3}", sum, sum / list1.Count, max, min);  
  66.   
  67.             //集合练习题2:写一个长度为10的集合,要求里面的元素不重复  
  68.             ArrayList list2 = new ArrayList();  
  69.             //创建一个随机数类  
  70.             Random r = new Random();  
  71.             for (int i = 0; i < 10; i++)  
  72.             {  
  73.                 int number = r.Next(0, 10);  
  74.                 if (!list2.Contains(number))  
  75.                 {  
  76.                     list2.Add(number);  
  77.                 }  
  78.                 else  
  79.                 {  
  80.                     //一旦有重复的元素,当前的循环不算,重新来,当前减1即可  
  81.                     i--;  
  82.                 }  
  83.             }  
  84.             for (int i = 0; i < list2.Count; i++)  
  85.             {  
  86.                 Console.WriteLine(list2[i]);  
  87.             }  
  88.   
  89.             Console.ReadKey();  
  90.         }  
  91.     }  
  92. }  

Hashtable集合的使用(键值对集合):

[csharp] view plain copy
  1. using System;  
  2. using System.Collections;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Threading.Tasks;  
  6.   
  7. namespace 集合1  
  8. {  
  9.     class Program  
  10.     {  
  11.         static void Main(string[] args)  
  12.         {  
  13.   
  14.             //第二个单词的首字母小写  
  15.             Hashtable ht = new Hashtable();  
  16.             ht.Add(1, "陈如水");  
  17.             ht.Add(2, "陈诗音");  
  18.             ht.Add(3, "陈诗悦");  
  19.             ht.Add(falsetrue);  
  20.   
  21.             int a = 10;  
  22.             //获取变量的类型  
  23.             Type t = a.GetType();  
  24.             Console.WriteLine(t);  
  25.             //推断类型  
  26.             var b = 10;  
  27.             Type type = b.GetType();  
  28.             Console.WriteLine(type);  
  29.   
  30.             //在键值对集合中是根据键寻找值的  
  31.             //for (int i = 0; i < ht.Count; i++)  
  32.             //{  
  33.             //    Console.WriteLine(ht[i]);  
  34.             //}  
  35.             //Console.ReadKey();  
  36.   
  37.   
  38.             foreach (var item in ht.Keys)  
  39.             {  
  40.                 //var表示变量类型  
  41.                 //item表示集合里面的每一项,表示一个键值对  
  42.                 //collection表示待遍历的集合  
  43.                 //ht.Keys 表示遍历集合中的键  
  44.                 //ht.Values表示遍历集合中的值  
  45.                 Console.WriteLine("遍历集合中的每一项,获取值{0}", ht[item]);  
  46.             }  
  47.             Console.ReadKey();  
  48.         }  
  49.     }  
  50. }  
二:C#中的foreach使用以及Stopwatch类的使用

[csharp] view plain copy
  1. using System;  
  2. using System.Collections;  
  3. using System.Collections.Generic;  
  4. using System.Diagnostics;  
  5. using System.Linq;  
  6. using System.Text;  
  7. using System.Threading.Tasks;  
  8.   
  9. namespace 集合foreach循环  
  10. {  
  11.     class Program  
  12.     {  
  13.         static void Main(string[] args)  
  14.         {  
  15.             //for循环与foreach循环的效率问题:如果循环次数比较多,foreach循环的效率比较高。  
  16.             int[] sum = { 2, 34, 5, 7, 9, 5, 34, 2, 6, 7, 89, 9, 0, 5, 4, 3, 2, 2, 12 };  
  17.             //查看循环的耗时  //00:00:00.0062843  
  18.             Stopwatch sw = new Stopwatch();  
  19.             sw.Start();  
  20.             //for (int i = 0; i < sum.Length; i++)  
  21.             //{  
  22.             //    Console.WriteLine(sum[i]);  
  23.             //}  
  24.             //00:00:00.0053999  
  25.             foreach (var item in sum)  
  26.             {  
  27.                 Console.WriteLine(item);  
  28.             }  
  29.             sw.Stop();  
  30.             Console.WriteLine(sw.Elapsed);  
  31.   
  32.             //练习1:将用户输入的简体字转化成繁体字  
  33.             Console.WriteLine("请输入要转化的简体字:");  
  34.             string input = Console.ReadLine();  
  35.             Hashtable map = new Hashtable();  
  36.             //此时必须有把简体字作为键,把对应的繁体字最为值,这样才可以进行寻找到。  
  37.             for (int i = 0; i < map.Count; i++)  
  38.             {  
  39.                 if (map.ContainsKey(input[i]))  
  40.                 {  
  41.                     //打印键所对应的值  
  42.                     Console.WriteLine(map[input[i]]);  
  43.                 }  
  44.                 else  
  45.                 {  
  46.                     //直接打印出用户的输入  
  47.                     Console.WriteLine(input[i]);  
  48.                 }  
  49.             }  
  50.             Console.ReadKey();  
  51.   
  52.         }  
  53.     }  
  54. }  

三:C#中的path类的使用

[java] view plain copy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.IO;  
  4. using System.Linq;  
  5. using System.Text;  
  6. using System.Threading.Tasks;  
  7.   
  8. namespace path练习  
  9. {  
  10.     class Program  
  11.     {  
  12.         static void Main(string[] args)  
  13.         {  
  14.             //Path类的练习:静态类,类中全部是是静态成员(其实是对字符串方法的封装)  
  15.             string path = @"C:\Users\Tuhuadmin\Desktop\面向对象初级\老赵.avi";  
  16.             //截取老赵.avi  取消转义  
  17.             int lastIndex = path.LastIndexOf("\\");  
  18.             string name = path.Substring(lastIndex + 1);  
  19.             Console.WriteLine(name);  
  20.   
  21.             //1)获取文件的名字:  
  22.             string fileName = Path.GetFileName(path);  
  23.             Console.WriteLine(fileName);  
  24.             //2)获取文件的名字(忽略扩展名):  
  25.             string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(path);  
  26.             Console.WriteLine(fileNameWithoutExtension);  
  27.             //3)获取文件扩展名:  
  28.             string extensionName = Path.GetExtension(path);  
  29.             Console.WriteLine(extensionName);  
  30.             //4)返回指定文件的目录信息:即当前文件位于哪个文件夹路径下  
  31.             string dirInfo = Path.GetDirectoryName(path);  
  32.             Console.WriteLine(dirInfo);  
  33.             //5)获取指定文件的全路径(包括文件名和扩展名)  
  34.             string fullPath= Path.GetFullPath(path);  
  35.             Console.WriteLine(fullPath);  
  36.             //6)连接两个字符串成为一个路径  
  37.             string str=Path.Combine(@"c:\a\","b.txt");  
  38.             Console.WriteLine(str);  
  39.             Console.ReadKey();  
  40.         }  
  41.     }  
  42. }  

四:C#中的File类的使用

[csharp] view plain copy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.IO;  
  4. using System.Linq;  
  5. using System.Text;  
  6. using System.Threading.Tasks;  
  7.   
  8. namespace file练习  
  9. {  
  10.     /// <summary>  
  11.     /// date: 20161018   
  12.     /// author: crs  
  13.     /// describe: File类的练习:专门用来操作文件的类,静态类  
  14.     /// 对文件常见的操作:创建、删除、复制  
  15.     /// </summary>  
  16.     class Program  
  17.     {  
  18.         static void Main(string[] args)  
  19.         {  
  20.             //1)在指定的路径下创建文件(如果指定的路径下已经存在此文件,就不会继续创建)  
  21.             //File.Create(@"C:\Users\Tuhuadmin\Desktop\new.txt");  
  22.             //Console.WriteLine("创建成功!");  
  23.   
  24.             //2)删除指定路径下的文件  
  25.             //File.Delete(@"C:\Users\Tuhuadmin\Desktop\new.txt");  
  26.             //Console.WriteLine("删除成功!");  
  27.   
  28.             //3)复制一个文件到指定的路径  
  29.             File.Copy(@"C:\Users\Tuhuadmin\Desktop\new.txt", @"C:\Users\Tuhuadmin\new.txt");  
  30.             Console.WriteLine("复制成功!");  
  31.             Console.ReadKey();  
  32.   
  33.         }  
  34.     }  
  35. }  

五:C#中的编解码问题

[csharp] view plain copy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Threading.Tasks;  
  6.   
  7. namespace _3编码  
  8. {  
  9.     class Program  
  10.     {  
  11.         static void Main(string[] args)  
  12.         {  
  13.             //1)文本文件有不同的存储方式,将字符串以什么样的形式保存为二进制文件,这就是编码问题。  
  14.             //2)如果出现乱码现象,就是编码出现了问题。  
  15.             //3)什么是文本文件,用记事本能够打来的文件。.doc结尾的不算。  
  16.             //4)编解码为类Encoding  
  17.             //5)乱码产生的原因:你保存这个文件的编码格式与打开这个文件的编码格式不一致。  
  18.   
  19.         }  
  20.     }  
  21. }  

面相对象:(与面向过程相对应)
万物皆对象
创建一个对象帮你做事。
对象具备属性和方法,属性指对象具有的各种特征,每个对象的每个属性都拥有特定值。方法指对象的功能、作用、行为。

C#中类的基本语法
访问修饰符 class 类名{
字段:字段前面必须添加下划线
属性:属性的作用是保护字段,对字段的取值和赋值进行限定.
属性的本质就是两个方法set和get.
自动生成属性的快捷键:Ctrl+R,Ctrl+E
输出属性值的时候,要调用get()方法
给属性赋值的时候,要调用set()方法,内部的实现和java一样
如何给当前项目添加一个类啊?选中项目----->右键单击----->添加----->类
类的实例化,用关键字new
 语法: 类  实例名 = new 类();
类的成员的访问:
    实例名.属性    实例名.方法名();
字段、方法、属性(后面讲)都可以叫做类的成员Member,它们都需要定义访问级别访问级别的用处在于控制成员在哪些地方可以被访问,这样达到面向对象中“封装”的目的

访问修饰符:public private (internal protected)

当我们创建好一个类的对象后,要给这个对象的没个属性去赋值,这个过程称之为对象的初始化。
如果想要把一个类当做工具类,可以考虑将这个类写成静态的。
静态类为整个项目所共享,并且不占用内存。只有程序运行全部结束后,静态资源才会被释放。在定义的时候加关键字static。
this指代当前类的对象。

类的构造方法(构造函数):原理
1)构造方法用来创建对象,并且可以在构造函数中对对象进行初始化。
2)构造函数是用来创建对象的特殊方法,方法名和类名一样,没有返回值,连void都不用。
3)构造函数可以有参数,new对象的时候传递函数参数即可
4)如果不指定构造函数,则类有一个默认的无参构造函数。如果指定了构造函数,则不再有默认的无参构造函数,如果需要无参构造函数,则需要自己来写。
5)构造函数可以重载,也就是有多个参数不同的构造函数。
—————————————————————————————————————————————>
new关键字帮我们做了哪三件事
1)在内存中帮我们开辟一块空间,
2)在开辟的空间中创建对象
3)对象的初始化工作。
——————————————————————————————————————————————>
命名空间
1)namespace(命名空间),用于解决类重名问题,可以看做“类的文件夹”。
2)如果代码和被使用的类在一个namespace则不需要using。
3)在不同命名空间下的类调用有两种方法: 写全称 命名空间.类名;先using引用命名空间,再调用
4)如果使用集合,就需要导入命名空间,java中常说的导包。快捷键:Ctrl+.  类的左下角也可以导入命名空间;alt+shift+f10

比如两个项目之间引用其中的类,如何设置两个项目之间的引用。右键单击项目下的引用----->添加引用即可----->选择项目。
—————————————————————————————————————————————>
值类型和引用类型
值类型:存在于栈内存中,引用类型存在于堆内存中。
数组、枚举、结构是值类型。字符串属于引用类型。
————————————————————————————————————————————————————————————————————>
字符串
1)string可以看做是char的只读数组。char c = s[1];。例子:遍历输出string中的每个元素。
2)C#中字符串有一个重要的特性:不可变性,字符串一旦声明就不再可以改变。所以只能通过索引来读取指定位置的char,不能对指定位置的char进行修改。
如果要对char进行修改,那么就必须创建一个新的字符串,用s. ToCharArray()方法得到字符串的char数组,对数组进行修改后,调用new string(char[])这个构造函数(暂时不用细研究)来创建char数组的字符串。一旦字符串被创建,那么char数组的修改也不会造成字符串的变化。例子:将字符串中的A替换为a。
不可变性:一句话解释,当你给字符串重新赋值后,就的值并没有被销毁,而是重新开辟新的空间去存储新的值。
字符串中方法的学习:
1)把字符串看做字符数组进行处理,直接可以通过下标获取某个字符;str[1];
2)ToCharArray():获取一个字符数组char[ ];
3)创建一个新的字符串 new string(参数);
4)使用StringBuilder效率更高,一定要学会使用
5)StopWatch类用于统计程序的运行时间,sw.Start()、sw.Stop()、sw.Elapsed
6)Length:可以获取字符串的长度。
7)ToUpper()方法:将字符串转化成大写法;ToLower()方法,将字符串转换成小写
8)Equale():比较字符串的方法,在比较的时候忽略了字符串的大小写。
9)Split(char[] separator, StringSplitOptions options):将字符串按照指定的字符,分割成字符串数组。 options 取RemoveEmptyEntries的时候移除结果中的空白字符串
10)Replace(string oldValue, string newValue) 字符串的替换方法:将字符串中的出现oldValue的地方替换为newValue;文字过滤,名字替换等
11)Substring(int startIndex),取从位置startIndex开始一直到最后的子字符串;截取字符串
12)Substring(int startIndex, int length) 从位置startIndex开始长度为length的子字符串,如果子字符串的长度不足length则报错
13)bool Contains(string value)判断字符串中是否含有子串value
14)bool StartsWith(string value)判断字符串是否以子串value开始;
15)bool EndsWith (string value)判断字符串是否以子串value结束;
16)int IndexOf(string value):取子串value第一次出现的位置。索引值
17)Int IndexOf(string value,int startIndex)
18)Int LastIndexOf() 字符最后一次出现的位置
19)Trim() 去掉字符串两端的空格
20)string.IsNullOrEmpty(name1); 判断字符串是否为null或者空字符串
21)string.json("",字符串数组) 主要用于把字符串数组转化成字符,中间以什么分割。

面向对象三大特征:继承、封装、多态
数组是引用类型,其他的按照常规就好了
继承:解决类中的代码冗余。
1)在c#中,所有的类都直接或间接的继承自了object类.(当我们定义一个类的时候,如果没有写:继承一个类,那么这个类就继承了object类)
2)继承的格式:父类
3)继承的特点:单根性和传递性
4)protected访问修饰符不允许其他非子类访问.子类可以访问。protected权限比private高。受保护的,由此修饰的成员,可以在当前类的内部以及在子类中进行访问。

类型转换:
1)Person p = new Teacher();  子类可以隐式的转换成父类.
2)Teacher t=(Teacher)p;
3)is和as  typeA is type B 仅判断,typeA as TypeB 先判断,再转换 
is把前面的转化成后面的,是否成功。

子类没有继承父类的私有字段,根本访问不到;公有字段是可以继承的。继承公有的属性和方法();
查看类图  查看类之间的继承关系:类之间的继承关系图。
子类没有继承父类的构造函数,但是在子类实例化的时候,会调用父类的构造函数。
子类会默认调用父类默认无参数的构造函数。

如果父类中写一个参数的构造函数,而子类中没有写对应的构造函数,就会报错:
解决方法:1)在子类中重新写一个无参数的构造函数2)在子类中显示的调用父类的构造函数,使用关键字:base() 只有独特的关键是才this接收。

new关键字的作用:隐藏从父类哪里继承过来的成员变量和成员方法。隐藏的后果就是子类调用不到父类的成员。
this  base
------------------------------------>
里式转换:主要用于实现多态。
1)子类可以赋值给父类
2)如果父类中装的是子类对象,那么父类可以强转成子类。
------------------------------------>
集合:关键是记忆api
特征:长度可变,类型多样。
Count:获取集合长度
Add() 添加单个元素
AddRange() 添加集合元素
list[i]遍历集合,获取集合中的某个元素
Clear():清空集合中的元素
Remove(Object obj):删除指定的元素
RemoveAt(int index):删除指定索引处的元素,索引从0开始。 
RemoveRange(0,3):根据下标去移除一定范围内的元素
Reverse():元素翻转
Insert(int index,Object obj):在指定的索引处插入元素
InsertRange(int index,Object obj) 在指定的索引处插入一个集合。
Sort():集合中的元素升序排列
Contains()判断集合是否包含某个元素,返回值为bool类型。合长度问题:
Count:实际包含的元素的个数
Capacity:可以包含的元素的个数
如果没有元素时,值都是0;
每次集合中实际包含的元素的葛素count超过了可以包含的元素的个数capacity的时候,
集合就会向内存申请多开辟一倍的控件,来保证集合的一直够用。
------------------------------------>
随机数类的使用
Random类 在某个范围内随机产生随机数。
Next(0,10)在0到10之间产生随机数,不包括10。
------------------------------------>
Hashtable集合:增加、删除、查询、判存;
1)数据是以键值对的方式存储,在键值对集合中,是通过键寻找值的。
2)键值对均是Objcet类型,
3)键用于查询数据,不允许重复
4)对值使用强制类型转换
Clear()清空集合
Remove(Obkect key):根据key移除指定的集合元素。
Add()添加数据
ContainsKey()是否包含指定的键 
根据索引去获取集合中的值
------------------------------------>
foreach循环的使用
foreach (var item in collection)
 {
 //var表示变量类型
 //item表示集合里面的每一项
 //collection表示待遍历的集合
 //ht.Keys 表示遍历集合中的键
 //ht.Values表示遍历集合中的值  
 }
C#是一种强类型的语言。在代码中,必须对每一个变量的类型有一个明确的定义。
var:能够根据值推断出数据类型。
在声明var变量的同时,必须给它赋值。
int a = 10;
//获取变量的类型
Type t = a.GetType();
Console.WriteLine(t);
//推断类型
var b = 10;
Type type = b.GetType();
Console.WriteLine(type); 
------------------------------------>
//Stopwatch:测量一个程序的运行时间。
Stopwatch sw =new Stopwatch();
sw.Start(); 
sw.Stop();
Console.WriteLine(sw.Elapsed); 
------------------------------------>
第十一天:总结:
里式转换:2条
两种集合:Arraylist与Hashtable,存储的数据类型任意,集合的遍历与数据的增删改查
Path类的使用操作路径的类
File类的使用:操作文件的类
导入命名空间的快捷键:
alt+shift+F10
------------------------------------>
————————————————————————————————————————>
要处理好着四个问题:
1)访问修饰符的限定作用
2)字段、属性、方法之间的关系,this关键字的使用
3)属性的作用
4)静态与非静态的调用方式
5)类的实例化与对象的初始化时不一样的

原创粉丝点击