近来笔者(csdn远古某人)想做些windows小应用,一番了解之后,C# + winform或者C# + wpf上手速度快,难度低,故开启了我的C#学习之旅。怕自己学习以后,长时间不用会有所遗忘,故有了【C#入门】这一系列~
本文最适于学过其他编程语言,却无C#编程基础的同学快速上手。
一、Visual studio安装及环境配置
1.安装条件
windows:win7及以上 (xp不带.net framework,需要额外安装,出问题的概率大)
内存: 8G及以上(越大越好)
安装包:自己百度下载安装,不停的下一步就好,建议不要安装在系统盘
2.环境变量配置
a)确认csc的目录
csc.exe为c#编译程序
64位:C:\Windows\Microsoft.NET\Framework64\v4.0.30319
32位:C:\Windows\Microsoft.NET\Framework\v4.0.30319
64位的电脑就选64位目录,32位的就选32位的目录
b) 配置环境变量
右击【计算机】-【高级系统设置】-【高级】-【环境变量】-【path】-【编辑】
输入csc的目录,注意前面没分号的话,就先输入分号,再输入csc的目录
二、第一个Hello,world!
1. 新建txt文档,修改后缀名为.cs
.cs文件是c#的代码文件,和java用的.java, c++用.cpp是一样的,后缀的含义是(c#, 读 c sharp,取了前两个字母cs)
2. 手输代码
using System;
class HelloWord
{
static void Main() {
Console.WriteLine("Hello,world!");
Console.ReadKey();
}
}
注意:
1.System的S大写,后面有个分号
2.方法名Main,M大写
3.需要添加Console.ReadKey();否则输出结果会一闪而过
3. 编译运行
在文件目录中,按【shift】+【鼠标右键】,选择【在此处打开命令窗口】
编译:输入 csc 你的文件名.cs
执行:你的文件名.exe
即可看到Hello,world!
三、代码解读
1. using System;
C#中的using可以理解成C语言的include,就是为了引入系统库System
System在C#中叫做命名空间(namespace),这个可以理解为一个代码集合,里面的代码可以存放在不同的文件中,只要这些文件都申明同一个namespace,一旦using这个namespace,则该namespace下的所有方法都可以用
2.static void Main() {}
Main函数为cs文件的入口函数,有就执行Main函数中的代码,没有,就不执行~和C语言、java中的main一样
3. Console.WriteLine()
这个方法其实是System.Console.WriteLine(),方法是在System命名空间下的。
函数的功能是控制台换行输出,和C语言的println,java的System.out.println一样。
四、Visual studio的使用
【新建项目】-【Visual C#】-【Windows】-【控制台应用程序】-修改名称及位置-【确定】
系统资源管理器窗口下-【Program.cs】,点击之后在右侧的编辑窗口修改代码
五、变量类型
1.变量和常量:
变量命名:以字母或下划线开头,可以包含字母,下划线和数字
int a = 1;
常量:const修饰,内容不可变,如果修改了,会报错
const int a = 1;
a = 2;
Console.WriteLine(a);
Console.ReadKey();
2.常见类型
int:整形,4位
ps: 如果是从网络上获取的int类型,因为数据库中int是可以存null值,所以在接收int类型变量时,可以使用int?,后续的bool,float等均可加?,可存null值。
short:短整型,2位
long:长整型,8位,可以表示的数值范围比int大一些,一般用int,比较大的用long,特别大的用decimal
bool:布尔类型,只有true和false,c#是无法将int转成bool类型的,0不可以转为false
float:单精度浮点型
double:双精度浮点型,可以显示15-16位
ps:C#支持{0},{1}这样的格式化输出语句,{0}代表逗号后面的第1个参数,{1}代表逗号后面的第2个参数
char:字符类型,必须使是单引号,
string:字符串类型,必须使是双引号。加@可以保持原有格式,可避免格式丢失及转义字符输出时需要反复转义。
ps:php和python中的单双引号可以混用,C#可不行哦(php中单双引号在动态变量用的时候,有少许不同,如感兴趣,自行百度)
其他类型byte,sbyte,uint,ushort,decimal不是很常用,有兴趣请自行了解
3.常见类型转换
string转int: int.Parse() 或int.Tryparse()
string转float,double同理,float.Parse(),double.Parse()
其他类型转string:变量名.ToString()
4.string知识补充
string.Empty和空字符串""等同,string已经创建出来了,里面内容为空而已,相当于盖好了房子,人还没住进去
null代表字符串还没创建,相当于房子还没开始盖
string x = null;
string y = string.Empty;
string z = "";
Console.WriteLine(x == "");
Console.WriteLine(y == "");
Console.WriteLine(z == "");
Console.ReadKey();
string和StringBuilder,这个也是老生常谈的一个问题,在java编码规范中,动态添加多个字符串必须使用StringBuilder而不能使用string,C#也是一样的。
用下面代码跑出的结果
100个字符,可以忽略不计
1000个字符,StringBuilder比string快1ms
10000个字符,StringBuilder比string快10多倍
100000个字符,StringBuilder 18ms左右,string一直在算。。。
// namespace在代码顶部添加
using System.Diagnostics;
// string和stringbuilder,添加字符的时长比较,2万个字符就很明显,10万字符str计算要等很久,stringbuilder 18ms左右,1000字符以内仅相差1ms左右
Stopwatch sw = new Stopwatch();
sw.Start();
//string a = string.Empty;
//for (int i = 0; i < 1000; i++)
//{
// a += i.ToString();
//}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++)
{
sb.Append(i.ToString());
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
Console.ReadKey();
5.数组
数组:基本类型的有序集合
数组的常见写法:
string[] arr1 = new string[]{"123", "abc", "zxy"};
int[] arr2 = new int[10];