如何学好C# 开篇浅论2

    技术2022-05-11  66

    如何学好C# 开篇浅论<二> 上一章提到掌握六点学习C#的学习方法,今天就让我们通过实例来逐点分析:           1. 多读代码,网上很多好的代码,不要为了实现功能而简单的复制+粘贴,"复制+粘贴"只要会操作电脑的都会,关键学会作者的思想(非常重要啊). 这一点相信很多人应该深有体会.说句实话,要做到真的很难.特别是长一点的程序,很少新手能有耐心从头看尾.究其原因不是不愿意看,可能也实在是看不懂.其实这一点真的没有关系.长些的看不懂就先看较为简单一些的.不过在看别人的程序之前,最好还是有些基础为好,我这里指的基础,是熟悉语法然后再来看程序.说到这里,让我们看一下下面的代码,这是一个本人在网上看到的一个使用计时器的例子: //************************************************************************* using System; using System.Timers;   class testtimer {     public static void Main()     {         Timer timer = new Timer();         timer.Elapsed += new ElapsedEventHandler( displaytimeevent );         timer.Interval = 1000;         timer.Start();         timer.Enabled = true;           while ( Console.Read() == 'q' )         {            timer.Stop();         }     }       public static void displaytimeevent( object source, ElapsedEventArgs e )     {         Console.Write("/r{0}", DateTime.Now);     } } //************************************************************************* 这个例子是比较简单一个程序了 . 初学者到看这段代码后会先迫不及待的先 copy 然后再 phase 运行 , 一旦运行通过 ( 一般都会通过 , 除了在字符在网页上到 VS 里面可能会出现空白的占位符 ) 便也不去深究了 . 我在这里提出一个方法 . 以供参考 : 第一步 : 这个 Timer 如果你是第一次看到就需要查 MSDN, 你会发现除了在 System.Timers 的命名空间下有 , System.Windows.Forms System.Threading.Timer 命名空间下面都有 , 在此我大概的介绍一下 : System.Windows.Forms.Timer 是应用于 WinForm 中的,它是通过 Windows 消息机制实现的,类似于 VB Delphi 中的 Timer 控件,内部使用 API  SetTimer 实现的。它的缺点是计时不精确,而且必须有消息循环 . System.Timers.Timer System.Threading.Timer 非常类似, .NET  Thread  Pool 实现的,轻量,计时精确,对应用程序、消息没有特别的要求。 System.Timers.Timer 还可以应用于 WinForm ,完全取代上面的 Timer 控件。它们的缺点是没有所见即所得的功能,需要手工编码。 第二步 : 明白意思后 . 这段代码对于你的作用基本上就发挥了 60% . 还有百分之四十是你的思考 . 有人会问这样一下简单的程序还有什么好思考的 ? 其实不然 , 它的功能无非也就是延时 , 这种设计方式虽然简单明了 , 但你可以不时的问一下还有没有别的什么办法可以替代它呢 ? 应该还有吧 ! 于是就出来了这段代码 . 大家可以看一下下面这段程序 :   //************************************************************************ using System; using System.Threading;   class testtimer {     public static void Main()     {         Thread thread = new Thread(new ThreadStart(displaytimethread));         thread.Start();           if (Console.Read() == (int)('q'))            thread.Abort();            }       public static void displaytimethread()     {         do         {             Console.Write("/r{0}", DateTime.Now);                      Thread.Sleep(1000);         } while (true);     } } //************************************************************************* 实现同样的功能却用了两种不同的方法.每个人写程序的风格都不一样.一个功能让一百个人去可能有一百种写法,你现在所需要的就是多尝试这些方法.然后从里面去找出一种最适合 自己 的或当前项目的.当然你更可以通过 System.Windows.Forms.Timer System.Threading.Timer 来实现相同的功能 . 这里我就不一一列举了 , 之所举这个例子是希望初学者一定要学会先思考后发问 , 遇事多靠自己来解决          2. 多写代码 , 然后再不断的改进 . 如果只看不练也是没有用的 . 程序和其它学术类的东西不一样 , 实际的操作也非常重要 . 这里讲的多写不是乱写 , 是有组织的写一些代码 . 先可以按照第一点慢慢来 , 然后不断的改进 , 这一点在上一点已经讲过了 . 就是不断的通过迭代法去寻找一条最好的路 . 因为此时你跟本不知道哪条路最好 . 来看一下我为大家展现的一个简单例子 :   //*************************************************************************   class TestLoop {     public static void Main()     {         int num = Console.Read();         int[] testArray = new int [100];         for (int i = 0; i < 100; i++)         {             if (num < 10)                 testArray[i] = 100;             else                 testArray[i] = 1000;         }     } } //*************************************************************************   很多人会问,这有什么问题吗?这是很多初学者写循环的方法.其实不然.这种方法虽然程序易读性会好一些,但是程序效率会比较低,让我们一起来看一下下面这段代码,当然它们做的是同一件事情.   //*************************************************************************   using System; using System.Threading;   class TestLoop {     public static void Main()     {         int num = Console.Read();         int[] testArray = new int [100];         if (num < 10)         {             for (int i = 0; i < 100; i++)             {                   testArray[i] = 100;             }         }         else         {             for (int i = 0; i < 100; i++)             {                 testArray[i] = 1000;             }         }     } } //************************************************************************* 这段代码可能可读性没有上一段的高,不过效率的确是要快一些,如果你不信的话,你可以把数字调大一些.效果会很更明显一些.所以从一个功能和问题延伸开来看同一件事情,你会发现真正的开发的乐趣.自然也就会乐在其中了. ( 未完待续…………………………………………………………………………………………)  

    最新回复(0)