如何学好C# 开篇浅论2

如何学好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.FormsSystem.Threading.Timer命名空间下面都有,在此我大概的介绍一下:
System.Windows.Forms.Timer是应用于WinForm中的,它是通过Windows消息机制实现的,类似于VBDelphi中的Timer控件,内部使用API  SetTimer实现的。它的缺点是计时不精确,而且必须有消息循环.
System.Timers.TimerSystem.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.TimerSystem.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;
            }
        }
    }
}
//*************************************************************************
这段代码可能可读性没有上一段的高,不过效率的确是要快一些,如果你不信的话,你可以把数字调大一些.效果会很更明显一些.所以从一个功能和问题延伸开来看同一件事情,你会发现真正的开发的乐趣.自然也就会乐在其中了.
(未完待续…………………………………………………………………………………………)
 
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页