C#入门别贪多,先把这7个概念嚼碎了再谈别的
最近带几个刚转行做.NET的朋友,发现一个特别普遍的现象:他们不是不努力,而是太努力了。一上来就打开官方文档,从“程序集”看到“垃圾回收”,从LINQ拖到async/await,浏览器开了二十个标签页,越看越慌,最后怀疑自己是不是不适合写代码。
其实C#这个语言,你要真想用它做点东西出来,入门阶段根本不需要掌握那么多。我跟你说句实在话,把下面这7个概念吃透了,你已经能写出不少有用的程序了。别的都是后话。
1. 变量:别把它想得多高级,就是个装东西的盒子
变量这词儿听起来唬人,说白了就是你给内存里的一个存储位置起了个名字。你得告诉C#里面装的是什么类型的东西,是数字、文字还是真假值。
string name = "张三"; // 字符串类型,用来存文字int age = 18; // 整数类型,用来存年龄、数量这种整数double price = 12.99; // 小数类型,带小数点的数bool isDeveloper = true; // 布尔类型,只有true和false两种
这里有个小坑我必须给你指出来:很多人喜欢一句代码同时声明好几个变量,省行数但别省清晰度。别图一时爽整一堆 string a, b, c; 过两天你自己都记不住哪个是干什么的。变量名起得短不是本事,起得准才是。
另外说句题外话,C#现在有 var 这个关键字,可以让你少敲几个字母。但我建议新手阶段老老实实把类型写出来。为什么?因为你要去感受“类型”这个东西,它是C#的骨架,你躲不掉的。
2. 方法:把重复的代码打包,随用随取
写程序免不了反复干同一件事,比如跟用户打招呼。你总不能每次都把好几行代码复制粘贴一遍吧?复制粘贴一时爽,改起需求火葬场——到时候你光找哪儿没改就够喝一壶的。
方法就是把这堆重复的逻辑装进一个带名字的“盒子”里,想用就调用一次。
void SayHello(){ Console.WriteLine("你好,欢迎使用本系统!");}SayHello(); // 这一行就相当于执行了里面的代码
看到没,方法体里写什么逻辑你自己定,用的时候就喊它一声。等你后面学方法参数、返回值,你会发现这就是你自己定义的“工具”——像电钻,你拧螺丝前先把钻头装好,然后按个开关就行。
我见过不少新人纠结“什么时候该拆方法”。我给你个土办法:当你发现自己第三次复制粘贴同一段代码时,就该把它抽出来当方法了。这是最朴素的感受阀值。
3. 类与对象:图纸和盖出来的楼
面向对象这词儿被各种二手教程玩坏了,好像不扯几句多态、继承就不配讲。但说真的,一开始你只需要理解两个角色就够:类就是图纸,对象就是按图纸盖出来的那一栋楼。
// 图纸People:规定一栋“人物”楼要有名字和年龄两个属性class Person{ public string Name { get; set; } public int Age { get; set; }}// 按图纸盖第一栋楼,命名为张三Person person = new Person();person.Name = "张三";person.Age = 18;
图纸能画很多张,每张都能盖出无限多栋楼。刘备、关羽、张飞,都是按 Person 这张图纸盖出来的对象,但各自的名字和年龄互不影响。这个感觉你抓住了,后面什么继承、接口都不难理解——无非是图纸之间怎么参考复制。
顺带提醒一个容易踩的坑:C#里属性用 { get; set; } 缩写是C# 3.0以后的标准写法,可自动读写。但新手千万别为了显示自己“懂内部原理”去手写一堆 full property,除非你确实有逻辑要加,否则白白增加阅读负担。
4. 条件判断:让程序自己拿主意
程序再牛,它也得做选择。你是成年人还是未成年人,登录没登录,余额够不够——全是二选一的分岔路口。
int age = 17;if (age >= 18){ Console.WriteLine("你可以进网吧了。");}else{ Console.WriteLine("未成年人,回家写作业。");}
就这么简单。 if 后面括号里放条件,成立走第一花括号,不成立走 else 。还有 else if 可以接多个路口,就跟游戏里多分支对话一样,玩家选哪个走哪条分支。
来个真话:条件判断这块最难的从来不是语法,而是你容易把它嵌套得太深。三四个 if 叠在一起,缩进看着像金字塔,你自己读都会想吐。记住一个原则:超过两层嵌套就试试提前 return 或拆成方法。代码的“脏乱差”就是这么防出来的。
5. 循环:让电脑替你干重复的活儿
电脑最擅长的就是重复劳动,人最烦的就是重复劳动。循环就是把这“一个愿打一个愿挨”结合起来的桥梁。
// 打印出0到4这5个数字for (int i = 0; i < 5; i++){ Console.WriteLine(i);}
for 循环的三个表达式你得会读:第一个是起点,第二个是条件,第三个是每轮干的事儿(这里 i++ 就是 i 加1)。还有一种更常用的 foreach ,专门用来遍历集合里的每个元素。
List<string> languages = new List<string>() { "C#", "Python", "JavaScript" };foreach (string lang in languages){ Console.WriteLine(lang);}
这段代码的意思就是:“把 languages 里的每一项取出来,依次叫它 lang ,然后打印出来。” foreach 这条语法糖包着底层一堆麻烦,但你别管,先会用再说。
这儿有个常见坑: for 循环里修改计数器 i 的值,比如循环体里来个 i = i + 2 ,螺旋升天。别这么玩,要调试的时候你会疯的。
6. List:一个会自己变大的数组
C#里的数组是定长死的,你声明了能存5个就存不了第6个。但现实世界里你要存的东西数量可变——用户列表、购物车、生鲜订单,谁猜得到有多少个?这时候就用 List<T> ,它是集合家族里面最亲民的成员。
// 创建一个存放字符串的列表,并初始化三个语言List<string> languages = new List<string>() { "C#", "Python", "JavaScript" };// 随时往里加languages.Add("Go");// 随时看有多少个Console.WriteLine(languages.Count);
注意 List<T> 的尖括号,那不是小于号大于号,这是泛型的入门长相。尖括号里写什么,列表就能装什么类型。你就当它是一个“能说明书上写着装什么的智能书架”。等你后面学队列、字典这些,会发现全家桶里的套路都一样,左边装类型,右边存数据,上手特别快。
7. 异常处理:程序也有翻车的时候,你得给它系上安全绳
新手写代码的时候恨不得每行都成功,但现实是:让你转数字,你传个“hello”;让你读文件,文件被占用。这些意外时刻,如果不拦着,程序直接就崩了,用户看到的就是一个甩锅对话框。
异常处理就是给代码系上安全绳:
try{ int number = int.Parse("hello"); // 这句一定会炸 Console.WriteLine(number);}catch (FormatException){ Console.WriteLine("你输入的不是一个合法的数字。");}
try 里面放“有风险的代码”,一旦抛出 FormatException 这个特定类型的异常,就会被 catch 接住,然后执行你预设的安慰话术。这样一来,程序不仅不崩,还能优雅地告诉用户“你搞错了”。
说句掏心窝的,异常处理最怕新手把整个程序塞进一个巨型 try ,然后 catch (Exception) 空着不做处理。那等于拿个铁桶把信号屏蔽了,错误真发生时你连个头绪都没有。捕获具体异常,给用户有意义的信息,这是高素质程序员的标志。
最后送你句话
学C#真不用一口吃成胖子。变量、方法、类、条件、循环、List、异常,这7个东西串起来,你已经能写个命令行版的记账本、题库刷题器、成绩统计脚本了。先写起来,遇到不会的再查,查完接着写。写烂代码不可怕,不写才可怕。
代码这行,最远的距离不是从入门到放弃,是从看懂到写一遍。去写吧,你敲下的每一行,都在给未来的自己铺路。


关注公众号↑↑↑:DotNet开发跳槽❀