嘿嘿,今天周六啦,我们是自由学习啦,于是还记得前几天纠结的事情,还有好多不太熟悉的题目那,于是今天就找出来练习下拉,而且这些题目在老师给我们复习时间也给我们讲解过啦,这样一来应该做起来还是容易点的啦,不过却不是我想象中的那样啦,我下午坐在这里做这些题,然后分析下它的思路以及做法和一些方法间的区别,一下整啦六个小时,好出乎意料啦,下面就把我做的这些题整理在这里啦。
//常量的关键字const class Program { enum E : short //定义枚举类型里面的参数为short类型的 { man, woman } enum QQ : long //定义枚举类型里面的参数为long类型的 { online, hidden, busy } static void Main(string[] args) { A a = new A(); a.x = 100; a.y = 200; //结构体可以实例化,通过对象传参 QQ qq = QQ.online; //枚举的方法 E e = E.man; Console.WriteLine("{0},{1}",a.x,a.y); Console.ReadKey(); } struct A //结构体,定义一个点的坐标 { public int x; public int y; } }
其实在复习的课堂上面,老师说的枚举和结构的知识点还记得,但是,今天突然想起来他们之间的区别,就把他们写在啦一起,下次在复习时间可以更好地记得他们各自的用法。虽然结构使用的很少吧,但是还是总结一下啦,嘿嘿。
二.随机数的使用方法
class Program { /// <summary> /// 输出20次1到10之间的随机数 /// </summary> /// <param name="args"></param> static void Main(string[] args) { Random r = new Random(); for (int i = 0; i < 20; i++) { Console.WriteLine(r.Next(1, 10)); //随机数的产生使用的是Random中的Next方法 } Console.ReadKey(); } }
在这里,主要是这个方法在刚接触时间真的不能理解他的意思,就是记得它的用法啦,而现在这个已经看起来很熟悉啦,但是这个在使用的地方会多,就简单的写啦一下。
三.字符串的处理
class Program { static void Main(string[] args) { #region 接收用户输入的一句英文,将其中的单词以反序输出 //课上练习2:“I love you"→“i evol uoy" //var v = arr.Split(' '); //foreach (var item in v) //{ // Console.WriteLine(item); //} #endregion #region 合并字符串或者数组Join //string num = "I love you"; //string arr = " i hate you"; //Console.WriteLine(string.Join(",", num, arr));//可以使用一个连接符 //Console.WriteLine(string.Join("", num, arr));//join方法中可以为空 //string[] ar = { "I love you", "i hate you", "I love you" }; //string num1 = string.Join("*", ar); // 添加分隔符 //Console.WriteLine(num1); #endregion #region 字符串的合并以及其他转换的方法 //string name = " Tom "; //string name1 = "Grease"; //Console.WriteLine(string.Concat(name, name1, true)); //Console.WriteLine(name.ToUpper()); //Console.WriteLine(name.ToLower()); //Console.WriteLine(name.Trim()); //Console.WriteLine(name.TrimStart()); //Console.WriteLine(name.TrimEnd()); #endregion #region 字符串的比较 //string name = "Grease"; //string name1 = "Grease"; //if (string.Compare(name, name1, StringComparison.OrdinalIgnoreCase) > 0) //{ // Console.WriteLine("name大于name1"); //} //else if (string.Compare(name, name1, StringComparison.OrdinalIgnoreCase) == 0) //{ // Console.WriteLine("字符串相等"); //} //else //{ // Console.WriteLine("name小于name1"); //} #endregion #region Equals // string name = "Grease"; // string name1 = "Grease"; //// if (name.Equals(name1)) // if (string.Equals(name,name1)) // { // Console.WriteLine("="); // } // else // { // Console.WriteLine("!="); // } #endregion #region ToCharArray //string str = "我爱北京天安门,天安门上太阳升"; //char[] s = str.ToArray(); //Console.WriteLine(s[2]); ////char[] a = str.ToCharArray(); //var arr = str.ToCharArray(); //foreach (var item in arr) //{ // Console.Write(item); //} #endregion //字符串为空或者为null.还有就是是否有空格,这三种情况的区别 #region IndexOf //string word = "旋转音乐盒,下雨天,下雪天! 雪"; //Console.WriteLine(word.IndexOf("下雨天")); //IndexOf输出的是索引 //Console.WriteLine(word.LastIndexOf("音乐盒")); //LastIndexOf从后面开始数数,但是还是该字符正方向的索引 //找不到子字符串返回-1 #endregion #region 方法Substring和Split //string word = "旋转音乐盒。下雨天,下雪天!雪"; //string a = word.Substring(1); //当方法Substring为一个参数时间则是从此索引街渠道左后 //Console.WriteLine(a); //string b = word.Substring(5, 8);//当为两个参数时间,则为索引,从第一个开始截取到第二个 //Console.WriteLine(b); //string[] c = word.Split(','); //Split方法使用,分割时间是一个字符 //foreach (var item in c) //{ // Console.WriteLine(item); //} //string[] d = word.Split(new char[]{',','!','。'}); //可以把多个字符当做分隔符,即用字符数组作为参数 //foreach (var item in d) //{ // Console.WriteLine(item); //} #endregion #region Equals与Compare区别 //string num = "Grease"; //string arr = "grease"; //在这里需要注意空格和标点符号都也可以区别是否一样 //Console.WriteLine(string.Equals(num, arr)); //Console.WriteLine(num.Equals(arr, StringComparison.OrdinalIgnoreCase)); ////在这里StringComparison.OrdinalIgnoreCase是不区分大小写的方法,区分时间可以不用写这个方法,Equals的结果输入为bool类型真为true,假为false //Console.WriteLine(string.Compare(num, arr)); //Compare的结果输出为1与0,真为0,假为1 //Console.WriteLine(string.Compare(num, arr, StringComparison.OrdinalIgnoreCase)); #endregion #region Replace //string name = "ease"; //string name1 = "Grease"; //Console.WriteLine(name.Replace("e", "b").Replace("a", "w")); //Replace可以多项替换 //Console.WriteLine(name1.Replace("e", "b")); #endregion Console.ReadKey(); } }
首先想说的是我再字符串类型转换就是char,string,ToString和ToCharArray之间的转换一直就是迷茫中,但是字符串可以使用的方法就是上面这些,虽然我们不能仅仅依赖于微软给我们提供的方法,但是在我们使用啦这些方法我们的程序真的变得简单好多啦的。
四.集合和装箱拆箱的区别
class Program { static void Main(string[] args) { //装箱与拆箱 object o= 1; //装箱 就是引用类型转换位值类型 int i = (int)o; //拆箱 就是值类型转换为引用类型 #region ArrayList //string[] strArray = { "下雨天", "旋转音乐盒", "晴天娃娃" }; //ArrayList array = new ArrayList(); //ArrayList是任意类型都可以添加进去 //array.AddRange(strArray); //添加一个数组要用AddRange方法,其他的可以使用Add方法 //array.Add(o); //添加一个object类型的变量 //array.Add("audoeahu"); //添加字符串 //array.Add('a'); //添加字符 //array.Add(4); //添加一个整形的数字 ////array.RemoveAt(1); //移除ArrayList中的其中一项,其中参数为索引值 ////array.RemoveRange(2, 3); //移除ArrayList中的其中一项或者几项,其中参数为索引值,从哪个所引导哪个索引 ////array.Clear(); //清空ArrayList中的每一项成员 //array.Reverse(); //可以倒叙输出ArrayList中的每一项成员 //#endregion //foreach (var item in array) //{ // Console.WriteLine(item); //} #endregion #region 泛型List #region int //List<int> list = new List<int>() {2,5,6,4,5,8,8}; //foreach (var item in list) //{ // Console.WriteLine(item); //} #endregion #region string //List<string> li = new List<string> {"1","2","3","4","5"}; //string[] arr = li.ToArray(); //foreach (var item in arr) //{ // Console.WriteLine(item); //} #endregion #endregion #region HashTable Hashtable table = new Hashtable(); table.Add("1", "2"); table.Add("3", "4"); table.Add("5", "6"); foreach (var item in table) //????????????????????????????? { Console.WriteLine(item); } foreach (var item in table.Keys) //遍历输出Hashtable中的key键的值 { Console.WriteLine(item); } foreach (var item in table.Values) //遍历输出Hashtable中的Values键的值 { //Hashtable是键值对的形式存放数据以及输出数据的 Console.WriteLine(item); } #endregion #region Dictionary //Dictionary<string, string> d = new Dictionary<string, string>(); //d.Add("旋转音乐盒", "阿悄"); //d.Add("下雨天", "南拳妈妈"); //foreach (var item in d) //{ // Console.WriteLine(item); //} //foreach (var item in d.Keys) //{ // Console.WriteLine(item); //} //foreach (var item in d.Values) //{ // Console.WriteLine(item); //} #endregion Console.ReadKey(); } }
嘿嘿,上面有一个问题不知道啦,就是在HashTable中不能直接遍历出每一项吗?而Dictionary是可以的,而且Dictionary也可以仅仅遍历出来key值或者Value的值。在集合中其实现在好多使用的是List泛型和Dictionary这两个,似乎是使用ArrayList的现在都使用啦List,使用HashTable的现在好多使用啦Dictionary,所以我们要在掌握List和Dictionary的基础上在学习ArrayList和HashTable啦。
五.对象初始化和对象初始化器的区别
class Product { public Product() { } public Product(string name, double price, DateTime time, double code) { this.Productname = name; this.Productprice = price; this.Producttime = time; this.Productcode = code; } public string productname; public string Productname { get { return productname; } set { productname = value; } } private double productprice; public double Productprice { get { return productprice; } set { productprice = value; } } private DateTime producttime; public DateTime Producttime { get { return producttime; } set { producttime = value; } } private double productcode; public double Productcode { get { return productcode; } set { productcode = value; } } internal void ShowProductInfomation() { Console.WriteLine("商品名称{0},商品价格{1},出产合格日期{2},商品条码{3}", this.Productname, this.Productprice, this.producttime, this.Productcode); } }
class footproduct:Product { public void SayFoodInfomation() { Console.WriteLine("{0},{1},{2},{3}", base.Productname, base.Productcode, base.Productprice, base.Producttime); } }
class Program { static void Main(string[] args) { #region 初始化对象 //Product p = new Product("旺旺大礼包", 11.22, DateTime.Now.AddMonths(-18), 11.2233); //初始化对象、即实例化 //p.ShowProductInfomation(); //Console.WriteLine(p.productname); //Console.ReadKey(); #endregion #region 对象初始化器 Product p1 = new Product { Productname = "旺旺大礼包", Productprice = 11.22, Producttime = DateTime.Now.AddMonths(-18), Productcode = 11.2233 };//对象初始化器; Console.WriteLine(p1.Productname); Console.WriteLine(p1.Productprice); Console.WriteLine(p1.Producttime); Console.WriteLine(p1.Productcode); Console.ReadKey(); #endregion } }
在这里,对象的初始化与对象的初始化器容易混淆,于是在这里区别一下,帮助自己的记忆。
六.FileStream的用法
class Program { static void Main(string[] args) { #region FileStream读文件 //using (FileStream fs = File.Open(@"F:\resoult.txt", FileMode.OpenOrCreate, FileAccess.Read)) //打开文件,找到到文件的位置 //{ // byte[] bytes = new byte[200]; //定义文件每次读取的量 // int num = fs.Read(bytes, 0, bytes.Length); //读取字节块 // string resoult = Encoding.Default.GetString(bytes, 0, bytes.Length); //以ANSI编码的方式读取 // Console.WriteLine(resoult); //} #endregion #region FileStream读写文件 //int i = 0; //using (FileStream file = File.Open(@"F:\\第二周考试.rar", FileMode.OpenOrCreate, FileAccess.Read)) //{ // Byte[] bytes = new byte[10]; // using (FileStream f = File.Open(@"E:\\第二周考试.rar", FileMode.OpenOrCreate, FileAccess.Write)) // { // if(file.Read(bytes, 0, bytes.Length) > 0) // { // f.Write(bytes,0,bytes.Length); // i++; // Console.WriteLine(i); // } // } //} Console.ReadKey(); #endregion } }
这个其实就是读取文件的方法啦。嘿嘿
七.Ditectory的用法
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { string num = this.comboBox1.SelectedItem.ToString(); this.pictureBox1.Image = Image.FromFile(@"F:\/练习项目\/11月27日\/01radiocheckbox\/img" + num + ".jpg"); } private void Form1_Load(object sender, EventArgs e) { string[] image = Directory.GetFiles(@"F:\/练习项目\/11月27日\/01radiocheckbox\/img"); string[] file = new string[image.Length]; for (int i = 0; i < image.Length; i++) { string path = Path.GetFileNameWithoutExtension(image[i]); file[i] = path; } comboBox1.Items.AddRange(file); }
在这里使用的Directory是在winform中使用的,再窗体上面拖拉两个控件分别为PictureBox和Button,然后实现其各自属性和事件即可。
八.StringBuild的用法
class Program { static void Main(string[] args) { StringBuilder builder = new StringBuilder(); //StringBuilder需要初始化,通过对象添加参数 #region StringBuilder的方法 //builder.Append("下雨天"); //builder.Append("旋转音乐盒"); // Append事件为添加 //builder.AppendLine("下雨天"); // Append事件为添加之后换行 //builder.AppendLine("旋转音乐盒"); //builder.AppendLine("晴天娃娃"); //builder.Insert(3," 演唱:南拳妈妈 "); //builder.Insert(21, " 演唱:阿悄 "); //builder.Replace('演','主'); ////builder.Replace(); //在这里replace的方法参数仅仅为char类型 //builder.Remove(0, 2); //Remove在这里为把索引值为0到索引值为2的这段文字清除 ////builder.Clear(); //全部清空 #endregion //builder.AppendLine("<html>"); //StringBuilder的可以显示静态页的样式,而且不需要遍历输出,仅仅需要输出对象即可 //builder.AppendLine(" <head>"); //builder.AppendLine(" <title>网页</title>"); //builder.AppendLine(" </head>"); //builder.AppendLine(" <body>"); //builder.AppendLine(" <p>StringBuilder做的HTML代码"); //builder.AppendLine(" </p>"); //builder.AppendLine(" </body>"); //builder.AppendLine("</html>"); Console.WriteLine(builder); Console.ReadKey(); } }
StringBuilder其实用法应该和String比较一下那。但是我们在开始学习就一直使用String,而且我前面也详细的把定义以及那一个更好写过啦,所以就只说下StringBuilder的更多方法以及需要注意的啦。
九.StreamReader和StreamWriter的学习
class Program { static void Main(string[] args) { //StreamReader的用法,读取文件内容 using (StreamReader reader = new StreamReader(@"F:\\1.txt")) { while (reader.Read() > 0) { Console.WriteLine(reader.ReadLine()); } } string num = "abcabcabcabcabcabcabcabc"; using (StreamWriter str = new StreamWriter("1.txt")) { str.WriteLine(num); //在这里StreamWriter的参数应该怎么整?????????????? } Console.ReadKey(); } }
StringReader和StringWriter在这里就是读取和写入文件,这里是和电脑上存放的文息息相关的啦。
十.Path的用法
class Program { static void Main(string[] args) { //string strPath = @"D:\\r\\1.txt"; //Console.WriteLine(Path.GetExtension(strPath)); //获取字符串文件扩展名 //Console.WriteLine(Path.GetFileName(strPath)); //获取字符串文件名字 //Console.WriteLine(Path.GetFileNameWithoutExtension(strPath)); //获取字符串文件不带扩展名的名字 //Console.WriteLine(Path.GetFullPath(strPath)); //获取字符串文件的全部路径 //Console.WriteLine(Path.GetPathRoot(strPath)); //获取字符串文件的根目录 //Console.WriteLine(Path.GetDirectoryName(strPath)); //获取字符串文件的目录信息,不包含自己的字符串文件名字 //Console.WriteLine(Path.ChangeExtension(strPath,"mp3")); //改变字符串路径的扩展名 //string str = @"F:\\"; //必须以两个\\开头 //string str1 = @"1.txt"; //Console.WriteLine(Path.Combine(str,str1)); //合并字符串路径 Console.ReadKey(); } }
Path主要是针对字符串进行处理的,文件是虚拟的存在,这个要区分开的啦。
十一.文件File操作
class Program { static void Main(string[] args) { //文件的创建 读取 复制 移动 删除 //string path = @"E:\a.mp3"; //File.Create(path); //创建文件 //File.CreateText(@"E:\a.txt"); //创建文本文件 //////////////////string text = File.ReadAllText(@"E:\a.txt", Encoding.Default); //读取 //////////////////File.AppendAllText(@"F:练习项目", text, Encoding.Default); //参数怎么写? //将指定的字符串添加到文件中,如果文件不存在,则可以自动创建 //File.Copy(@"E:\a.txt", @"F:\b.txt", true); //复制 //string a=@"E:\a.txt"; //string b = @"F:\a.txt"; //File.Move(a, b); //移动 //File.Delete(b); //删除 //Console.WriteLine(File.Exists(@"D:\111.avi")); //Exists方法是确定指定的文件是否存在,返回一个bool类型的值 ////////////////////byte[] bytes = File.ReadAllBytes(@"E:\a.txt"); //ReadAllBytes怎么用? ////////////////////string a=Encoding.Default.GetString(bytes); ////////////////////Console.WriteLine(a); //Console.WriteLine(File.GetCreationTime(@"F:\练习项目")); //获取文件的创建时间 //Console.WriteLine(File.GetLastAccessTimeUtc(@"F:\练习项目"));//获取上次访问文件文件的时间 Console.WriteLine("ok"); Console.ReadKey(); } }
这个也是针对计算机英翻上存放的文件进行处理,而他的AppendAllText方法的参数在vs中有显示,不知道为什么没能写出来啦,回头拉问问再补充上来啦。
十二. 委托Delegate
delegate string Print(string name, string sex); //创建一个有返回值的委托 class Program { static void Main(string[] args) { Print p = new Print(SayHi); //委托的调用 第一种 参数为一个方法 p += SayHello; Print p1 = delegate(string name, string s) //第二种 { return name + s; }; Print p2 = (string name, string sex) => name + sex; //第三种 Print p3 = (name, address) => name + address; //第四种,同时这也是拉姆达表达式的形成过程 Console.WriteLine(p("笑笑", "男")); //为对象添加参数的值 Console.ReadKey(); } static string SayHi(string name, string sex) { return name + sex; } static string SayHello(string name, string sex) { return name + sex; } }
在这里委托刚开始学习都有点晕啦,其实就是在Main函数传参时间委托实例化对象时间传进来一个方法作为参数。
十三.事件Event
delegate void Bark(); //定义一个委托 class Program { static void Main(string[] args) { Cat c = new Cat(); c.Name = "大脸猫"; Mouse m = new Mouse(); m.Name = "蓝皮鼠"; c.Running += m.MouBark; /*在CatBark方法被实例化调用时间,事件Running被触发, 则调用MouBark,这样就是事件的实现过程*/ c.CatBark(); Console.ReadKey(); } } class Cat { string name; public string Name { get { return name; } set { name = value; } } public event Bark Running; //事件是建立在委托之上的,这里是建立一个事件 public void CatBark() { Console.WriteLine("Hi,{0}来啦",Name); if (Running != null) { Running(); } } } class Mouse { string name; public string Name { get { return name; } set { name = value; } } public void MouBark() { Console.WriteLine("{0}快跑", Name); } }
当事件的发生一定会伴随着委托的实现,这个事件其实在winform中,我们对按钮等事件的单击事件就是事件中的一种啦,他需要调用委托。
今天的总结就到这里啦,虽然是有点多啦,但是向系统的把一下学过的知识系统化啦,这样也可以帮助我们更好的记忆啦,嘿嘿。