今天主要是主要学习了一些控制台的操作。
主要说说下面的2个方法:
Console.Read();Console.ReadKey()

1. Console.Read(),先看看MSND上的解释

------“在键入输入字符时,Read 方法会阻止其返回;该方法在您按 Enter 键时终止。按 Enter 会在输入内容后面追加一个与平台有关的行终止序列(例如,Windows 追加一个回车符和换行符序列)。对 Read 方法的后续调用一次检索输入中的一个字符。检索完最后一个字符后,Read 会再次阻止其返回,并重复上述循环”
------
大概说了这么个意思 第一次调用会暂停程序,直到输入Enter,同时会在输入内容上添加一个终止序列(Windows下是回车符和换行符)
      后续的Read方法调用不会暂停程序,直到Read方法检索完毕了最后一个字符,这时如果要再调用Read方法,程序又会再次处于阻塞状态了,就像第 一次调用Read方法一样,但是这又是新的一次轮回了!
举个简单例子:
            Console.Read(); //第一次运行Read()程序停止了 等你输入
            Console.WriteLine(Console.Read());//第二次Read()运行没有止
            Console.WriteLine(Console.Read());//第三次read()也没有停止
            Console.WriteLine(Console.Read());//第四次read()就停止了
假如第一次我输入了字符‘a’并按Enter,那么现在的输入流里面就有字符a 回车符和 换行符。 第二次运行的read()返回结果就是‘a’后面的字符回车符的ascII码(这个类似于sqldataReader类的read()方法,往读取下一条),第三次运行 read()就返回 回车符 后面字符 换行符的 acsII码,此时read()发现已经是最后一个字符了,那么以后的read()方法就会重复上述过程。
我感觉 这个read()方法很麻烦,比如这样的场景可以用console.read():我输入了一堆字符,我想对某些或者某个字符做处理 我就可以用一个
int temp;while((temp=console.read())!=-1){}来遍历 但是要注意强加的那个换行和回车。
 
2.Console.ReadKey()
这个方法有连个重载Console.ReadKey()和Console.ReadKey(bool);
带bool参数的方法可以隐藏用户的输入,提供个安全保护作用,不多说。
这个方法有两个功能:1.获取用户按下的下一个字符
                  2.获取用户按下的下一个功能键
第一个大家熟悉,第二个可能就给忽略了。比如我想判读用户是不是输入了回车键
,Shift键,空格键 就可以这样来:
            ConsoleKeyInfo cki = Console.ReadKey();
            if(cki.Key==ConsoleKey.Enter)
            {
                  //do
            }
如果我在把上面的代码放到一个循环里面,一直检测者 如果按了Enter 就执行if()里面的代码。这不是就类似于事件的功能了吗?

还有类对象在内存中是怎么实现的:
   在一个程序一开始代码中的类就存在于内存中的托管堆中了。这个过程应该由CLR来完成。在需要该类的一个对象时候 在堆中就new一个内存空间给这个对象,在这个内存空间中存放自己的私人信息,方法、像这些共性的东西还放在类的内存空间中,用到的时候再去拷贝。然后再线程堆栈中存放这个对象的内存引用也就是地址。这样在内存实例化一个对象的过程就结束了。

今天还讲到值类型了引用类型的区别。这个简单些就不说了。今天上台想说下我的看法,紧张的嘴都张不动,也不知道往哪说。以后上台之前一定要想好 我想说什么?要说什么?然后总结下我说的什么。


最后也晒晒我的钢琴程序:写的不好欢迎拍砖
  static void Main(string[] args)
        {        
            bool flog1 = false;   //判断是不是要重新谈     
            do
            {
                Console.WriteLine("按 q 键结束输入...然后播放刚才的曲子....");
                bool flog = true;//记录啥时间要停止输入
                List<double []> mylist = new List<double []>();//保存按键数
                while (flog)
                {
                    DateTime dt = DateTime.Now;
                    ConsoleKeyInfo cki = Console.ReadKey(true);
                    int  i = 0;
                    switch (cki.KeyChar)
                    {
                        case '1':
                            Console.BackgroundColor = ConsoleColor.Green;
                            Console.Write("  ");
                            i = 37;

                            break;
                        case '2':
                            Console.BackgroundColor = ConsoleColor.Red;
                            Console.Write("  ");
                            i = 38;
                            break;
                        case '3':
                            Console.BackgroundColor = ConsoleColor.DarkYellow;
                            Console.Write("  ");
                            i = 39;
                            break;
                        case '4':
                            Console.BackgroundColor = ConsoleColor.DarkGreen;
                            Console.Write("  ");
                          
                            i = 40;
                            break;
                        case '5':
                            Console.BackgroundColor = ConsoleColor.Blue;
                            Console.Write("  ");
                            i = 41;
                            break;
                        case '6':
                            Console.BackgroundColor = ConsoleColor.Magenta;
                            Console.Write("  ");
                            i = 42;
                            break;
                        case '7':
                            Console.BackgroundColor = ConsoleColor.DarkMagenta;
                            Console.Write("  ");
                            i = 43;
                            break;
                        case 'q':
                            flog = false;
                            Console.WriteLine();//换行
                            break;
                        default:
                            i = 1000;
                            Console.BackgroundColor = ConsoleColor.Black;
                            Console.Write("  ");
                            break;
                    }
                    if(i!=0)//如果没有监测到按键 就不添加记录
                    {
                        DateTime dt1 = DateTime.Now;
                        double dt2 = (dt1 - dt).TotalSeconds;//记录两次按键直接的时间差
                        Console.Beep(i, 100);
                        double[] temp = new double[2];
                        temp[0] = i;
                        temp[1] = dt2;
                        mylist.Add(temp);
                    }
                   
                }
                //开始播放录音
                int tempint = 0;
                int tempint2 = 0;
                foreach (double [] i in mylist)
                {
                    tempint = (int)(i[1] * 1000);
                    Thread.Sleep(tempint);
                    tempint2 =(int)i[0];
                    Console.WriteLine("音符:{0}  距离上次按键时间差:{1}",i[0],i[1]);
                  
                    Console.Beep(tempint2, 100);
                }
                Console.ResetColor();
                Console.WriteLine();
                Console.WriteLine("播放完毕...");
                Console.WriteLine("如果要重新弹曲子,请按 r 键");
                if (Console.ReadKey(true).KeyChar == 'r' || Console.ReadKey(true).KeyChar == 'R')
                {
                    flog1 = true;
                }
            } while (flog1);
          
        }