下栽地止:https://lexuecode.com/4375.html
C#基础知识
基础语法你如果前期学习过C语言的话,那么学习C#基础知识就会感觉很容易,特别好理解。在这个环节你需要认真学习基础知识,你得学会在保证语法不报错的情况下,利用基础知识写一些简单的算法;得熟练了解语法,使用得当并可以实现一些逻辑代码。
(基础语法、数据类型、变量、循环、方法、数组、集合、判断、类等)
面向对象开发
C语言是面向过程的开发语言,而C#是面对对象的开发语言,在使用C语言写逻辑代码时都是可以按照一定的顺利逻辑将其实现就OK,而C#就不一样,你在学习语法,实现业务逻辑时得考虑程序的可扩展性,鲁棒性等。
你得拥有抽象思维,可以将现实中无生命体征的物品进行拟物处理,将它们进行更为抽象的提炼,汇总为某个特殊类,让其这个类代表这类物品,并让其拥有这个物品的所有属性和行为,这就是面向对象开发。
(继承、封装、多态、接口、抽象类等)
这一部分的学习比较抽象,学会拥有抽象思维,让自己可以更好的理解这些知识点。
基础知识进阶
这里你将会学习一些高端的编程玩法,可能短期内,你无法使用到,但是它们更多体现在你的职业后期,当你实际使用框架或者阅读源码的过程中,都会遇到这些知识点,并有可能被它困住。
C#速成指南:从入门到进阶,实战WPF与Unity3D开发
集成开发环境
Visual Studio
结构
using System;
包含 System 命名空间
class hello{ /注释/
static void Main(string\[\] args){
//一个文件一个main函数
}
}
结构体
struct Books{变量...}
结构不支持继承。
结构不能声明默认的构造函数
枚举
enum Day { Sun, Mon, tue, Wed, thu, Fri, Sat };
Day.Sun==0
Day.Mon==1
接口
public interface PaintCost {int getCost(int area); }
派生类
class Rectangle : hello, PaintCost{}
全析
namespace first{
命名空间声明
public class Test{
可以多个class
构造函数、析构函数、静态成员...
变量...
decimal a=10;
128 位精确的十进制值,28-29 有效位数
sbyte b=2;
8 位有符号整数类型
uint c;
32 位无符号整数类型
ulong d;
64 位无符号整数类型
ushort e;
16 位无符号整数类型
dynamic f=a,g=b;
存储任何类型的值在动态数据类型变量中
字符串
"hhh\"hhh\nhhh"==
@"hhh"hhh\nhhh"==
@"hhh"hhh
hhh"
"hhh" + "hhh"
字符串一堆方法:拆分,复制...
可空类型,即可以赋值为null
int? a,b=null;
//a==null
int a;
//a==0
合并运算符
int b=a ?? 5;
//a为null则b=5,否则b=a
多维数组
int [,] a = new int [3,4] {
{0, 1, 2, 3} ,/*初始化索引号为 0 的行 */
{4, 5, 6, 7} ,/*初始化索引号为 1 的行 */
{8, 9, 10, 11}/*初始化索引号为 2 的行 */
};
交错数组
int[][] scores = new int[5][];
for (int i = 0;
i < scores.Length;
i++)
scores[i] = new int[4];
Array 类
scores.Rank;
//获取数组的秩(维度)
scores.Length;
Array.Copy(Array, Array, Int32);
/*从数组的第一个元素开始复制某个范围的元素
到另一个数组的第一个元素位置*/
其他运算符
&a//地址
*a//指针
obj is Car// 检查 obj 是否是 Car 类的一个对象。
obj as int//强制转换,即使转换失败也不会抛出异常。
常量
const
其他常量例如8进制数
0213
装箱与拆箱
object obj;
obj = 100;
//这是装箱
int a=obj as int;
//这是拆箱
循环
foreach(变量 in 数组){}
方法...
public int plus(int a){return a+1;
}
重载
public int plus(char a){return a+2;
}
运算符重载
public static Box operator+ (Box b, Box c){...}
可重载
+, -, !, ~, ++, -- ( op-type operand )
+, -, *, /, %,==, !=, <, >, <=, >= ( op-type operand, op-type2 operand2 )
不可直接重载
&&, ||
不可重载
+=, -=, *=, /=, %=,=, ., ?:, ->, new, is, sizeof, typeof
按值传递
(int a)
引用
(ref int a)
按输出传递,即变量最后一个值赋回去
(out int a)
传递数组给函数
(int[] a)
参数数组
int plus(params int[] arr)
传递时:
plus(512, 720, 250, 567, 889)
访问权限
public:所有对象都可以访问;
internal:同一个程序集的对象可以访问;
protected internal:访问限于当前程序集或派生自包含类的类型。
}
}
命名空间声明
namespace second{
public class Test{
}
嵌套命名空间
namespace second{
}
}
命名空间运用
class TestClass{
void hhh(){
first.Test;
second.Test;
}
}
using指令
using second; //using指令:引入命名空间
using static System.Math; //指定无需指定类型名称即可访问其静态> 成员的类型
using Project = PC.MyCompany; //起别名
using (Font font3 = new Font("Arial", 10.0f), //将实例与代码绑定
font4 = new Font("Arial", 10.0f))
预处理器指令
define PIQ //定义一系列成为符号的字符 if(PIW) {不会执行} //测试符号是否为真 elif(PIQ) {会执行} else {} endif //指定一个条件指令的结束 undef PIQ //取消定义符号 line number filename //修改编译器的行数以及(可选地)输出错> 误和警告的文件名 line default //恢复默认行号 error 你错了! //从代码的指定位置生成一个错误 warning 你就错了! //从代码的指定位置生成一级警告 pragma warning disable 169 //取消编号 169 的警告(即字段> 未使用的警告) pragma warning restore 169 // 恢复编号 169 的警告 region //在使用 Visual Studio Code Editor 的大纲特性时,指定一个可展开或折叠的代码块 endregion //标识着 #region 块的结束 示例用法
define CONNECT(a,b) a##b //##粘连两个标识符,只有宏定义中使用(#define) int CONNECT(a,1); //int a1
传统方式:
typedef struct _tag_Student Student;
struct _tag_Student{
char* name;
int id;
};
用宏定义方式
define STRUCT(type) typedef struct _tag_##type type; \
struct _tag_##type
STRUCT(Student){
char* name;
int id;
};
异常处理
try {throw a; } //a为throwable
catch(a) {}
finally {}
在 catch 块中使用 throw 语句来抛出当前的对象
class _throw{
void _throw(){
try{
MethodThatThrowsException();
}
catch (Exception ex){
//和根本不存在这个catch块的时候一样
throw;
}
catch (Exception ex){
//stack trace认为你catch到的异常已经被处理了
//只不过处理过程中又抛出新的异常
//这时候stack trace就把throw ex;
当作错误根源了
throw ex;
}
catch (Exception ex){
//stack trace会自动认为内部异常是导致当前异常的原因
//也就会把内部异常的stack trace也递归显示出来
throw new Exception("oops!", ex);
}
}}
System.ApplicationException 类:
支持由应用程序生成的异常。所以程序员定义的异常都应派生自该类。
输入与输出
using System;
class _IO{
void _IO(){
console.write("C#很迷");
console.writeline("显示的信息");
Console.WriteLine("第一个学生的姓名{0},成绩{1}",name1,score1);
//“格式字符串”和变量列表,当有多个变量需要输出时可以使用该方法
//{0}、{1}叫做占位符,代表后面依次排列的变量表
console.readkey();
//等待用户按下任意键,一次读入一个字符
console.readline();
//string,当用户按下enter键的时候一次读取一行
convert.toint32/todouble("32");
//convert用于不同类型数据之间的转化
int.Parse("32");
//这个也能转化
}}
正则表达式:匹配专用,可以用于输入readline()的整理
Regex 类用于表示一个正则表达式
自己去看吧~
文件的输入与输出
特性,类似于Java的/ */,生成说明注释
[attribute(positional_parameters, name_parameter = value, ...)]
class || method || 变量 ......
自己去看吧~
反射:
允许在运行时查看特性(attribute)信息。
允许审查集合中的各种类型,以及实例化这些类型。
允许延迟绑定的方法和属性(property)。
允许在运行时创建新类型,然后使用这些类型执行一些任务。
不安全代码
由于C#中声明的变量在内存中的存储受垃圾回收器管理;因此一个变量(例如一个大数组)有可能在运行过程中被移动到内存中的其他位置。如果一个变量的内存地址会变化,那么指针也就没有意义了。
解决方法就是使用fixed关键字来固定变量位置不移动。
int[] list = {10, 100, 200};
fixed(int *ptr = list)
或者在方法上标明unsafe
public unsafe static void Main(){
int var = 20;
int* p = &var;
}
或程序里标明unsafe
unsafe{ int var = 20;
int* p = &var;
}
注意,编译时需要命令行编译或者修改编译器设置
C#高级知识 C#速成指南:从入门到进阶,实战WPF与Unity3D开发,关于高级知识部分这个环节,你可以试着做出点实际项目出来,不管是ADO.NET 还是ASP.NET MVC或者ASP.NET Web API,你都可以先跟着书本或者视频教程,先让自己会用继而模仿看别人的写法,自己也动手进行实现。
你可以在Github或者Gitee中找到一些开源的项目,比如图书管理系统、博客系统,论坛等一系列使用高级知识来实现的项目,你需要先阅读代码,看别人是如何实现的,从而在仿照别人的实现过程来按照自己的想法编写自己的系统。(通过这样的实战项目,你可以快速的上手实现,学着并尝试做一个全栈开发,自己一个人从前端到后端再到发布上线,体验下整个软件项目的完整生命周期)。
ADO.NET: 它是最原始的数据库访问技术,目前基本都不使用,市面上公司都是使用封装好的ORM,但是你也得学习它。你得了解它是如何和数据库进行交流的,尝试着自己做这些步奏,看是否能顺利连接数据库,并进行一系列的CRUD操作。
ASP.NET MVC:它是微软将模型-视图-控制器的编程思想进行程序化的一种实现,你学习它可以快速上手实现一个网站,通过这个技术你可以实现自己的想法,比如做个图书管理系统等,在结合之前学习的ADO.NET技术,就可以将前端到数据库都打通了。
ORM:ORM简称对象关系映射,是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。目前在C#语言中比较流行的有Entity Framework,NHibernate,SqlSugar(国内)。这块你主要学习EF就可以,其余的编程思想都是想通的,你只要学会使用其中一个,其余的简单学习下技巧就很快能上手。
【C#速成指南(从入门到进阶,实战WPF与Unity3D开发吾爱)】ASP.NET Web API:它是一种实现前后端分离的后端技术(SPA),也是目前市场上大家普遍使用的技术,通过它可以很简单的实现SPA,后端开发人员只需要编写后端的业务代码,通过API暴露出访问接口,可供前端人员进行使用。
推荐阅读
- 正则表达式|c#正则表达式——匹配不同类型的一个字符
- C#|C# 正则替换 Regex.Replace
- WPF|基于WPF的桌面宠物开发(一) (WPF简介+环境搭建+简单界面)
- c#|VS册程序设计C#---问卷调查系统
- c#课设|c#单机考试系统
- OpenCV|OpenCV在图像上画正弦曲线(c++)
- 数据结构|数据结构课程设计——学生成绩查询与分析系统(简单详细版,含讲解)
- c#|c# opencv 轮廓检测_OPENCV图像轮廓检测
- c语言|C语言——指针初识(三)(指针和指针数组,一级指针,二级指针详解)