关于C#我今天的六个小时_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 关于C#我今天的六个小时

关于C#我今天的六个小时

 2014/12/7 14:49:08  雪?  程序员俱乐部  我要评论(0)
  • 摘要:嘿嘿,今天周六啦,我们是自由学习啦,于是还记得前几天纠结的事情,还有好多不太熟悉的题目那,于是今天就找出来练习下拉,而且这些题目在老师给我们复习时间也给我们讲解过啦,这样一来应该做起来还是容易点的啦,不过却不是我想象中的那样啦,我下午坐在这里做这些题,然后分析下它的思路以及做法和一些方法间的区别,一下整啦六个小时,好出乎意料啦,下面就把我做的这些题整理在这里啦。一.总结啦一下枚举和结构以及常量的关键字//常量的关键字constclassProgram{enumE
  • 标签:C#

              嘿嘿,今天周六啦,我们是自由学习啦,于是还记得前几天纠结的事情,还有好多不太熟悉的题目那,于是今天就找出来练习下拉,而且这些题目在老师给我们复习时间也给我们讲解过啦,这样一来应该做起来还是容易点的啦,不过却不是我想象中的那样啦,我下午坐在这里做这些题,然后分析下它的思路以及做法和一些方法间的区别,一下整啦六个小时,好出乎意料啦,下面就把我做的这些题整理在这里啦。

          一.总结啦一下枚举和结构以及常量的关键字

 //常量的关键字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中,我们对按钮等事件的单击事件就是事件中的一种啦,他需要调用委托。

          今天的总结就到这里啦,虽然是有点多啦,但是向系统的把一下学过的知识系统化啦,这样也可以帮助我们更好的记忆啦,嘿嘿。

发表评论
用户名: 匿名