.NET编程技术——实验01:VS2015 对象浏览器的使用、简单调试和断点使用。
2017-12-23 13:44
429 查看
阅读须知:纯粹是本人啊Jun作为初学者的笔记和个人对其中知识的复习,大神请绕道。
大三,必修课,C#
实验01:VS2015 对象浏览器的使用、简单调试和断点使用。
实验04:RS485串口调试、基本控件使用、CRC算法应用
实验05:RS485串口通讯,串口指令的收发应用,完成串口基础功能,github地址:实验05
实验06:窗体应用的最小化在Windows状态栏中显示托盘图标
实验07:Windows的注册表的基本使用方法,文件流保存为文本文件基础用法
实验08:利用GDI+技术生成简单验证码,类似excel的数据折线图、并保存为图片
实验09:Access数据库的创建、表创建、MD5加密,数据、图片保存在数据库的用法
实验10:将DataGridView表单数据保存为excel文件,表单的基本格式化
包含实验06~实验10的功能:github地址:实验10
差不多放寒假了,终于有少许时间温故而知新。在C#的课程里,总共有10个实验,每周一个,刚开始的实验一20分钟卓卓有余,心想着这么简单的实验,是在挑战智商吗?这个天真的想法一直延续到期中验收,验收完的下半学期,理想破灭,简直拿生命去编程。
好了,总结完毕,那么先来认识一下C#的IDE(微软的Visual Studio),啊Jun用的是2015版本的,接下来的文章都用VS2015表明是Visual Studio 2015。
啊Jun认为老师在第一节课介绍了VS2015一些基本功能,其中最重要的就是Debug(调试)和对象浏览器。
为什么说这两个很重要呢,因为啊Jun在大一时候学的C语言和C++的老师都没有认真教过同学们如何Debug,每次测试一些函数的功能都是用print( )或者std::cout( )插入到其中,其测试效率非常低下,而且很麻烦,但是如果熟练运用VS中的Debug和断点,简直是快速且无敌。
嗯,第二个重要的功能就是视图中的对象浏览器,可以浏览所有组件的用法。好了,对象浏览器的功能其实就相当于微软MSDN中的开发指南,就是我们常说的API,那下面给出的是 .NET Framwork的开发指南网址:.NET
Framework 开发指南
好了,稍微介绍完了VS2015的Debug和对象浏览器的功能了;那么接下来就开始第一个实验了。
先看实验内容:
1、用控制台项目,做一个命令行的计算器,可以完成算术运算、移位运算等操作;
2、用控制台项目,做一个小应用,可以展示类型转换、装箱和拆箱的操作;
3、用控制台项目,做一个自我介绍的应用,可以自动计算年龄和距离过下一个生日还有几天,精确到小时。
首先第(1)题我在前面的文章有提到过,老师也提到过,计算器的动态编译器,但是我们上的课只学了变量和方法啊。。。这个我们完全搞不懂怎么个写法。然而老师跟我们说,不会就百度。
“不会就百度。。”,听到这句话,我很吃惊,怎么这个老师跟以前的C语言和C++的老师不一样,以前的老师都不允许在网上找答案。反观这位老师,在整个学期下来,给我们的感觉跟以前的编程课老师就是不一样,很新颖,后来打听了这些C#老师只是一名讲师,学历是比在校的其他老师低, 但是毋庸置疑,担任过的项目我想已经可以领先了几条街了。对于我们这些本科生来说,很幸运遇到这一些老师,不断刷新编程价值观。
好了,bb了这么多,那我们就来百度一下吧,百度到了:c#动态编译计算方法,大家可以参考一下,这边文章用的是窗体项目,啊Jun的是控制台项目,那么也很简单,换了参数就ok。其实对于初学者来说,也不简单的,因为如果以前只是接触C语言或者C++的话,只会控制台项目,完成没有窗体项目的经验,所以也需要摸索一些时间才行。以后的实验很快就会涉及到窗体项目。
这里算是运用了别人的API吧,我想以后学会引用别人的API是程序员们的一项需要很好掌握的技能,啊Jun也是在不断地学习中,啊Jun之前尝试在Android Studio想着依赖别人在Github开源的项目,但是暂时还没学会。。
那么,那个计算器,我改了一下别人的源码:如下
那么,这个是别人的源码就不好解释了,老师告诉我们只需要完成你想要的功能就可以了。
那么到了第(2)题,关于值类型和引用类型;装箱和拆箱的问题。
概念题:补充一下知识:
<1>. 数值转换有一个原则:从低精度类型到高精度类型可进行隐式转换,而 从高精度类型到低精度类型 必须进行显式转换;从精度相同的无符号 数值类型向有符号数值类型的转换也只能显式转换。
<2>. C#支持两个预定义的引用类型object和string。
在应用程序执行的过程中,引用类型使用new关键字创建对象实例,并存储在堆中。堆是一种由系统 弹性配置的内存空间,没有特定大小及存活时间,因此可以被弹性地运用于对象的访问。
所有被称为“类”的都是引用类型,
<3>. 装箱是将值类型转换为引用类型;拆箱是将引用类型转换为值类型 利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型与引用类 型链接起来。
到了第(3)题,这道题目可是花的时间就比较多了。
首先先来认识一下C#中的DateTime这个数据类型。我们可以在对象浏览器或者 MSDN的DateTime结构 查看DateTime的操作,实在太多了,不过没事,用到的只是那么几句。
<1>.DateTime是C#的一种表示日期和时间的类型,如获取当前的时间: DateTime.Now.ToString(“YYYY-MM-DD-HH-mm-ss”);
<2>.还有一种类型是:System.TimeSpan,可用于两个DateTime类型的数运算,如: System.TimeSpan s = DateTime d1-DateTime d2;
<3>. 想要获取当前时间:string nowTime = DateTime.Now.ToString("yyyy-MM-dd-HH"); 这里ToString()就是将时间类型转换成String类型,然后再根据“yyyy-MM-dd-HH”这样的格式将当前时间按照这样的格式输出。这些时间的输出格式有千百种,只要其中英文字母正确就没什么问题了,要注意的是MM:表示的是月份(Month),mm:表示的是分钟(minute),为了区分两者所以都是用大小写来区分。
<4>.DateTime date = Convert.ToDateTime(string); 将字符串转换为DateTime类型
<5>.数组的类型转换
下面就上代码,好好理解
实验01完成
,如果有疑问或者在哪些地方有错误的,欢迎大家指出,共同学习,共同进步。
实验01:VS2015 对象浏览器的使用、简单调试和断点使用。
实验04:RS485串口调试、基本控件使用、CRC算法应用
实验05:RS485串口通讯,串口指令的收发应用,完成串口基础功能,github地址:实验05
实验06:窗体应用的最小化在Windows状态栏中显示托盘图标
实验07:Windows的注册表的基本使用方法,文件流保存为文本文件基础用法
实验08:利用GDI+技术生成简单验证码,类似excel的数据折线图、并保存为图片
实验09:Access数据库的创建、表创建、MD5加密,数据、图片保存在数据库的用法
实验10:将DataGridView表单数据保存为excel文件,表单的基本格式化
包含实验06~实验10的功能:github地址:实验10
大三,必修课,C#
实验01:VS2015 对象浏览器的使用、简单调试和断点使用。
实验04:RS485串口调试、基本控件使用、CRC算法应用
实验05:RS485串口通讯,串口指令的收发应用,完成串口基础功能,github地址:实验05
实验06:窗体应用的最小化在Windows状态栏中显示托盘图标
实验07:Windows的注册表的基本使用方法,文件流保存为文本文件基础用法
实验08:利用GDI+技术生成简单验证码,类似excel的数据折线图、并保存为图片
实验09:Access数据库的创建、表创建、MD5加密,数据、图片保存在数据库的用法
实验10:将DataGridView表单数据保存为excel文件,表单的基本格式化
包含实验06~实验10的功能:github地址:实验10
差不多放寒假了,终于有少许时间温故而知新。在C#的课程里,总共有10个实验,每周一个,刚开始的实验一20分钟卓卓有余,心想着这么简单的实验,是在挑战智商吗?这个天真的想法一直延续到期中验收,验收完的下半学期,理想破灭,简直拿生命去编程。
好了,总结完毕,那么先来认识一下C#的IDE(微软的Visual Studio),啊Jun用的是2015版本的,接下来的文章都用VS2015表明是Visual Studio 2015。
啊Jun认为老师在第一节课介绍了VS2015一些基本功能,其中最重要的就是Debug(调试)和对象浏览器。
为什么说这两个很重要呢,因为啊Jun在大一时候学的C语言和C++的老师都没有认真教过同学们如何Debug,每次测试一些函数的功能都是用print( )或者std::cout( )插入到其中,其测试效率非常低下,而且很麻烦,但是如果熟练运用VS中的Debug和断点,简直是快速且无敌。
嗯,第二个重要的功能就是视图中的对象浏览器,可以浏览所有组件的用法。好了,对象浏览器的功能其实就相当于微软MSDN中的开发指南,就是我们常说的API,那下面给出的是 .NET Framwork的开发指南网址:.NET
Framework 开发指南
好了,稍微介绍完了VS2015的Debug和对象浏览器的功能了;那么接下来就开始第一个实验了。
先看实验内容:
1、用控制台项目,做一个命令行的计算器,可以完成算术运算、移位运算等操作;
2、用控制台项目,做一个小应用,可以展示类型转换、装箱和拆箱的操作;
3、用控制台项目,做一个自我介绍的应用,可以自动计算年龄和距离过下一个生日还有几天,精确到小时。
首先第(1)题我在前面的文章有提到过,老师也提到过,计算器的动态编译器,但是我们上的课只学了变量和方法啊。。。这个我们完全搞不懂怎么个写法。然而老师跟我们说,不会就百度。
“不会就百度。。”,听到这句话,我很吃惊,怎么这个老师跟以前的C语言和C++的老师不一样,以前的老师都不允许在网上找答案。反观这位老师,在整个学期下来,给我们的感觉跟以前的编程课老师就是不一样,很新颖,后来打听了这些C#老师只是一名讲师,学历是比在校的其他老师低, 但是毋庸置疑,担任过的项目我想已经可以领先了几条街了。对于我们这些本科生来说,很幸运遇到这一些老师,不断刷新编程价值观。
好了,bb了这么多,那我们就来百度一下吧,百度到了:c#动态编译计算方法,大家可以参考一下,这边文章用的是窗体项目,啊Jun的是控制台项目,那么也很简单,换了参数就ok。其实对于初学者来说,也不简单的,因为如果以前只是接触C语言或者C++的话,只会控制台项目,完成没有窗体项目的经验,所以也需要摸索一些时间才行。以后的实验很快就会涉及到窗体项目。
这里算是运用了别人的API吧,我想以后学会引用别人的API是程序员们的一项需要很好掌握的技能,啊Jun也是在不断地学习中,啊Jun之前尝试在Android Studio想着依赖别人在Github开源的项目,但是暂时还没学会。。
那么,那个计算器,我改了一下别人的源码:如下
class Program { static void Main(string[] args) { Calculate calculate = new Calculate(); bool flag = true; while (flag) { Console.WriteLine("计算器能够计算: 1.可以完成算术运算 和 移位运算等操作 \t 2. 退出计算器"); int choose = Int32.Parse(Console.ReadLine()); switch (choose) { case 1: Console.Write("输入你的算术表达式:"); String expression = Console.ReadLine(); object result = calculate.ComplierCode(expression).ToString(); Console.WriteLine("输出的结果:" + result.ToString()+"\n"); break; case 2: flag = false; break; default: break; } } } } class Calculate { public object ComplierCode(string expression) { string code = WrapExpression(expression); CSharpCodeProvider csharpCodeProvider = new CSharpCodeProvider(); //编译的参数 CompilerParameters compilerParameters = new CompilerParameters(); //compilerParameters.ReferencedAssemblies.AddRange(); compilerParameters.CompilerOptions = "/t:library"; compilerParameters.GenerateInMemory = true; //开始编译 CompilerResults compilerResults = csharpCodeProvider.CompileAssemblyFromSource(compilerParameters, code); if (compilerResults.Errors.Count > 0) throw new Exception("编译出错!"); Assembly assembly = compilerResults.CompiledAssembly; Type type = assembly.GetType("ExpressionCalculate"); MethodInfo method = type.GetMethod("Calculate"); return method.Invoke(null, null); } private string WrapExpression(string expression) { string code = @" using System; class ExpressionCalculate { public static DateTime start_dt = Convert.ToDateTime(""{start_dt}""); public static DateTime end_dt = Convert.ToDateTime(""{end_dt}""); public static DateTime current_dt = DateTime.Now; public static object Calculate() { return {0}; } } "; return code.Replace("{0}", expression); } }
那么,这个是别人的源码就不好解释了,老师告诉我们只需要完成你想要的功能就可以了。
那么到了第(2)题,关于值类型和引用类型;装箱和拆箱的问题。
概念题:补充一下知识:
<1>. 数值转换有一个原则:从低精度类型到高精度类型可进行隐式转换,而 从高精度类型到低精度类型 必须进行显式转换;从精度相同的无符号 数值类型向有符号数值类型的转换也只能显式转换。
<2>. C#支持两个预定义的引用类型object和string。
在应用程序执行的过程中,引用类型使用new关键字创建对象实例,并存储在堆中。堆是一种由系统 弹性配置的内存空间,没有特定大小及存活时间,因此可以被弹性地运用于对象的访问。
所有被称为“类”的都是引用类型,
例如:Student student1= new Student(); Student student2= student1;
<3>. 装箱是将值类型转换为引用类型;拆箱是将引用类型转换为值类型 利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型与引用类 型链接起来。
到了第(3)题,这道题目可是花的时间就比较多了。
首先先来认识一下C#中的DateTime这个数据类型。我们可以在对象浏览器或者 MSDN的DateTime结构 查看DateTime的操作,实在太多了,不过没事,用到的只是那么几句。
<1>.DateTime是C#的一种表示日期和时间的类型,如获取当前的时间: DateTime.Now.ToString(“YYYY-MM-DD-HH-mm-ss”);
<2>.还有一种类型是:System.TimeSpan,可用于两个DateTime类型的数运算,如: System.TimeSpan s = DateTime d1-DateTime d2;
<3>. 想要获取当前时间:string nowTime = DateTime.Now.ToString("yyyy-MM-dd-HH"); 这里ToString()就是将时间类型转换成String类型,然后再根据“yyyy-MM-dd-HH”这样的格式将当前时间按照这样的格式输出。这些时间的输出格式有千百种,只要其中英文字母正确就没什么问题了,要注意的是MM:表示的是月份(Month),mm:表示的是分钟(minute),为了区分两者所以都是用大小写来区分。
<4>.DateTime date = Convert.ToDateTime(string); 将字符串转换为DateTime类型
<5>.数组的类型转换
数组的类型转换 public static int StrToInt(string str) { return int.Parse(str); } string[] arrs = new string[] { "100", "300", "200" }; int[] arri = Array.ConvertAll(arrs, new Converter<string, int>(StrToInt));
下面就上代码,好好理解
static void Main(string[] args) { Console.WriteLine("你好,我是小Jun机器人,我是一个自我介绍的应用!!!\n"); Console.Write("请输入您的姓名:"); string name = Console.ReadLine(); Console.Write("\n请输入你的性别(男/女):"); string sex = Console.ReadLine(); Console.WriteLine(); if (sex == "男") Console.WriteLine(name + "先生,您好!现在小Jun可以为您计算下一个生日的距离时间!"); else if (sex == "女") Console.WriteLine(name + "女士,您好!现在小Jun可以为您计算下一个生日的距离时间!"); else { Console.WriteLine(); System.Environment.Exit(0); //强制退出 } Console.Write("请您以(yyyy-mm-dd)的格式输入您的生日:"); string birthday = Console.ReadLine(); string[] date = birthday.Split('-'); int[] date1 = Array.ConvertAll(date, new Converter<string, int>(StrToInt)); string nowTime = DateTime.Now.ToString("yyyy-MM-dd-HH"); string[] date2 = nowTime.Split('-'); int[] date3 = Array.ConvertAll(date2, new Converter<string, int>(StrToInt)); //下面是为了区分你是否过了今年的生日。 if (date3[1] - date1[1] >= 0) //是否到了生日的月份 { double day; day = Convert.ToDouble(date3[0] - date1[0]) + Convert.ToDouble(date3[1] - date1[1]) / 12; //会有小数,没有计算到日 Console.Write("\n您今年已经:{0} 岁了", Math.Round(day, 1)); date1[0] = date3[0] + 1; //过了今年的生日,所以要计算明年的生日 string s = string.Join("-", date1); System.TimeSpan disTime = Convert.ToDateTime(s) - Convert.ToDateTime(nowTime); int hour = 24 - date3[3]; Console.WriteLine(",距离下一次生日还剩"+Convert.ToInt32(disTime.TotalDays)+" 天 "+ hour+" 小时 "); } else { double day; day = Convert.ToDouble(date3[0] - date1[0] - 1) + Convert.ToDouble(12 - date1[1] + date3[1]) / 12; Console.Write("\n您今年已经:{0} 岁了", Math.Round(day, 1)); date1[0] = date3[0]; //还没过了今年的生日 string s = string.Join("-", date1); System.TimeSpan disTime = Convert.ToDateTime(s) - Convert.ToDateTime(nowTime); int hour = 24 - date3[3]; Console.WriteLine(",距离下一次生日还剩 " + Convert.ToInt32(disTime.TotalDays) + "天," + hour + "小时"); } Console.ReadLine(); } static int StrToInt(string s) //将字符串转换为int型 { return int.Parse(s); }
实验01完成
,如果有疑问或者在哪些地方有错误的,欢迎大家指出,共同学习,共同进步。
实验01:VS2015 对象浏览器的使用、简单调试和断点使用。
实验04:RS485串口调试、基本控件使用、CRC算法应用
实验05:RS485串口通讯,串口指令的收发应用,完成串口基础功能,github地址:实验05
实验06:窗体应用的最小化在Windows状态栏中显示托盘图标
实验07:Windows的注册表的基本使用方法,文件流保存为文本文件基础用法
实验08:利用GDI+技术生成简单验证码,类似excel的数据折线图、并保存为图片
实验09:Access数据库的创建、表创建、MD5加密,数据、图片保存在数据库的用法
实验10:将DataGridView表单数据保存为excel文件,表单的基本格式化
包含实验06~实验10的功能:github地址:实验10
相关文章推荐
- VS2015使用小技巧 利用断点调试查看父类装的是哪个子类对象
- VS2015 使用 Visual Studio Emulator For Android 调试无法命中断点的解决办法?
- VS2015使用小技巧 断点调试
- VS2015使用小技巧 断点调试
- 使用VS2015调试Android的C++动态链接库
- linux入门-使用vs2015开发与调试linux下应用
- VS2015使用 F11逐语句调试
- 使用VS2015打包winform程序安装包简单方法(不需要InstallShield)
- vs2015 使用64位IIS EXPRESS调试
- vs2015工具,调试项目的出现 断点未能绑定的错误
- VS2015 与 Git 的简单使用
- OBS-Studio使用VS2015编译调试
- 01-java基础加强,eclipse工具使用,快捷键,断点调试,单元测试,jdk5新特性,增强for循环,集合map,list,可变参数,枚举,反射,泛型
- VS2015断点调试快捷键
- VS2015下简单使用EF框架的方法
- vs2015 "行号显示"设置(vs简单使用)
- C#新手入门代码 VS2015 对象浏览器与summary的简单用法
- 【记录】解决VS2015调试Xamarin程序一闪而过(使用微软ANDROID模拟器)
- 在Win10上使用VS2015构建一个简单的WCF项目
- VS2015的对象浏览器的使用