之前准备省赛,没有时间学这个。现在省赛结束了,时间稍微多了一些所以准备学一点,由于这次省赛的成绩不是很好,所以我应该还是把主要的时间花在算法上。C#的话只能每周花点时间看看。由于没有用太多的时间来学习,所以就想以博客的形式记录自己学习历程。同时在总结归纳的过程中,应该可以使我对它的理解会更加深刻一些。 --- 前言
话说,"Hello World!"是每个程序员接触一门语言的第一个程序,当然作为 将来的程序员的 我也一样不例外,我的"Hello World!"
using System; namespace MyFirstProgram { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); Console.ReadKey(); } } }
虽然“Hello World!”,已经写过好几遍,但还是有种激动的感觉。(可能是我比较Low)
C#作为C开头的语言,其带有的C风格,还是对学过C\C++的同学比较友好,感觉比较舒服。
C#与C\C++对比,不同之处:
1、变量上多了一个类型推断 var 关键字。编译器可以根据变量的初始化值进行推断 变量的类型。
var a = "hello"; //像这样,编译器就会推断出变量 s 为 string 类型
2、预定义数据类型中,C#分为了 值类型 和 引用类型,值类型和C\C++差不多,引用类型感觉有点新,其实就有点像C++的引用
using System; namespace MyFirstProgram { class Vector { public int value; } class Program { static void Main(string[] args) { Vector x,y; x = new Vector(); x.value = 30; y = x; Console.WriteLine(y.value); y.value = 50; Console.WriteLine(x.value); Console.ReadKey(); } } }
输出结果为 30和50。有没发现什么,相信你已经发现,上面的运行结果告诉我们以上代码中就只有一个对象。为什么呢?
因为在C#中 要创建真正的对像就必须使用 new 关键字。
Vector x,y; //如果是这样,那么系统都不会创建真正的对象
比如,string类,在C#中string类型是一个引用类型。string对象会被分配到堆上,而不是栈上。到一个字符串变量赋予另一个字符串时,会得到对内存中同一个字符串的两个引用
string str1, str2; str1 = "hello World"; str2 = str1;
像上述例子,str1,str2都是指向“hello World”的引用并不是真正的对象。但是string与其他常见的引用类型又有一些区别:比如,字符串是不能修改的。修改其中一个字符串,就会创建一个全新的string对象,而另一个字符串将不会改变。C#中对于斜杠等字符输出还引入了一个更好的方法。在字符串前加‘@’,在这个字符后的所有的字符都只有他原来的含义----它们不会被解释为转义字符:
string filePath = @"C:\CSharp\MyfirstProgram.cs";
3、在bool类型上,C#不会将 1 作为 true, 0 作为 false。 bool的值 就是 True 和 False,不是 1和 0.
4、在循环控制上,其多了一个 foreach 循环。foreach可以循环迭代集合中的每一项。
5、C#与C++的switch不同之处:①C#的switch 的case子句的排放顺序无关紧要,甚至可以将default 放在最前面。②在C#中,可以将字符串作为测试的变量。
6、在注释上,C#支持C\C++的注释方法,同时引入了XML格式的文档说明,这个注释是以3条斜杠(///)开头,且是单行注释。C#编译器可以把XML元素从特定的注释中提取出来,并使它生成一个XML文件。要让程序集生成XML文档,需要在编译时指定 /doc选项后跟创建的文件名
C#的语法风格与C++比较接近,以上是其存在的一些区别。但是C#的类型检查机制,比C++严格许多。比如,若是使用未赋值的变量,那么编译器将会报错。在C++中,只用一个警告甚至在有的IDE上连警告都没有。