现在是大二下学期,跟着学校的课在学习C#,之前学过的语言有C,C++,Java,还有一点HTML
之前从没写过这种博客,而且又是一边学一边写,所以不管是版面或是专业性的知识理解上可能都会有一些问题,希望大神给指正。。。
每次的博客基本分成两部分,第一部分先完成一个例子(外加一些简单的解释),第二部分有相关的解释来详细拓展
C#是Microsoft推出的一种面向对象的编程语言,开发Windows相应的应用十分的方便
开发使用的软件是Microsoft Visual Studio(简称VS)
一、Hello World
1.打开VS后,选择新建项目(文件——新建——项目)
在新建项目窗口中,选择左侧模板中的“Visual C#”选项,然后选择中间“控制台应用程序”
最后,将下面项目名称和存储位置设置好,点击确定
如下图
建立好的初始状态
其中的一些代码及简单解释
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; //using后面的一些东西叫做namespace,中文是命名空间,具体见解释1 namespace HelloWorld {//这里就是把项目做成了namespace,个人理解就是为了日后的复用(此处不是很明白,求指教) class Program { static void Main(string[] args)//Main方法是CLR开始的第一个方法,也就是说运行时从这里开始 { } } }
2.在Main()方法中敲入如下语句
static void Main(string[] args) { System.Console.WriteLine("Hello World!"); //或 Console.WriteLine("Hello World!");等其他方法 //具体区别见后面解释2 }
3.点击调试——开始执行(不调试)或快捷键CTRL+F5
即可看到C#黑框的Hello World了<其他调试方法见解释3>
二、具体解释:
1.关于namespace
这个namespace我之前也没接触过,它可以限定名字的作用域,防止名字的冲突,另外还可用于代码的复用。
所以项目一开始的using就基本等同于C++里面的include,以及Java里的import
2.关于通过其他方法来显示“Hello World”
(1)namespce
下面两句话的结果都会调用System命名空间中,Console类的WriteLine函数,将“Hello World!”写出到标准输出上。
其区别在于:第一个语句使用了这个函数的全路径(即将函数所属的位置详细的描述), 这样不会引起任何的歧义(也就是前面说的namespace的优点);
而第二个语句则是直接使用Console类来调用函数。之所以能这样做是因为在项目的一开始我们加入了using System;这样的一句话。这样的话,程序在使
用System命名空间中的类型时就不用每次都在前面添加命名空间的名字了。
System.Console.WriteLine("Hello World!");
Console.WriteLine("Hello World!");
需要说明:1.第二种方法虽然看上去是简化了程序的语句,但某种程度上说它就失去了namespace的最大优点,即使用不同namespace的同名内容;
2.using后面一定要跟一个命名空间的名字。如下面的一句话就会引起错误
using System.Console;//注意Console是System下的一个类,而不是命名空间 class Hello { static void Main() { WriteLine("Hello World"); } }
显示的错误类型
(2)使用Main()方法的传入参数
首先点击项目——XXX(项目名称)属性
之后再出现的窗口中选中左侧的“调试”,并在右侧“命令行参数”中敲入一些参数
然后点击属性窗口选项卡旁边的×,并在Main()中添加如下语句
Console.WriteLine(args[0] + " " + args[1] + " " + args[2]);//args的个数根据你输入到参数列表的单词的个数
然后点击调试——启动调试(F5),再点击调试——开始执行(不调试)(CTRL+F5)。就可以看到你输入到参数中的单词了
(3)使用类与对象
尝试在项目中新建类,并在Main()方法中创造其对象,来调用WriteLine()方法
首先,在右侧项目名称上单击右键,选择添加——类
在出现的窗口中选择“类”,下方填写类的名称,确定
在新建的类中敲入代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HelloWorld { class Example { public static void StaticExampleWrite(string[] words) { Console.WriteLine("static method: " + words[0] +" "+ words[1]+" "+words[2]); } // static静态方法,从属于类本身。调用时可以通过对象,也可以直接通过了类来调用。 //一直在用的WriteLine也是Console里面的静态方法,可以通过Console类来直接调用 public void ExampleWrite(string[] words) { Console.WriteLine("non-static method: " + words[0] + " " + words[1] + " " + words[2]);//非静态方法,属于具体的每个对象 } } }
下面回到Program.cs文件,加入下面的语句
Example.StaticExampleWrite(args);//通过类直接调用 Example examp = new Example();//创建类的对象 examp.ExampleWrite(args); //通过具体对象来调用
注意,非静态方法不能通过类来直接调用
然后点击调试——启动调试(F5),再点击调试——开始执行(不调试)(CTRL+F5)。
3.关于调试
前面一直是在整体的调试。缺点在于不能再调试过程中对具体的某些内容进行监控,并且如果出错,难以在整个程序中寻找错误。下面我们通过设置调试的断点来逐个
语句或逐过程进行调试。这里两种方法有点不太理解。试了一下觉得好像逐语句能够到程序每一个正在执行语句的位置(如果调用了其他类的语句,则会转到所在类的位置
),而逐过程就是以Main()中的以整个一句(?)来进行调试??求指教
断点可以在对应语句左侧单击左键设置,位置如下图的红色圆点
在设置了断点之后,在点击F5进行调试,会发现程序会停在设置的断点位置,这里可以方便我们对一些参数进行查看,比如传入Main()方法的string数组args,将
鼠标放在args之上,会浮出args参数的列表,点击左侧的三角来查看程序运行至此时args参数的具体内容,方便出错时进行修改
4.修改控制台的显示效果
控制台可以通过一些语句来更改显示的效果,如背景的颜色、字体的颜色等等
例如,下面的代码的显示效果为
static void Main(string[] args) { Console.Title = "C# Hello World!"; Console.WindowHeight = 30;//设置控制台窗口的高度 Console.WindowWidth = 80;//设置控制台窗口的宽度 Console.BackgroundColor = ConsoleColor.DarkRed;//背景色 Console.ForegroundColor = ConsoleColor.Green;//前景色 System.Console.WriteLine("Hello World!"); Console.BackgroundColor = ConsoleColor.DarkMagenta; Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(args[0] + " " + args[1] + " " + args[2]); Console.BackgroundColor = ConsoleColor.Gray; Console.ForegroundColor = ConsoleColor.White; Example.StaticExampleWrite(args); Console.BackgroundColor = ConsoleColor.DarkRed; Console.ForegroundColor = ConsoleColor.Green; Example examp = new Example(); examp.ExampleWrite(args); }