总结C#笔记:基础概述

发布于:2023-01-19 ⋅ 阅读:(479) ⋅ 点赞:(0)

一、C#的概述

通过学习我了解到了C#起源于C语言族系,拥有C++的功能,由 Ecma 和 ISO 接受并确立了一系列标准。C#采用与C、C++以及Java一致的大括号风格语法。C#语法简化了C++的诸多复杂性,因此也相对简单且易上手。而同时,又提供了Java不具备的许多强大功能,例如可为null的值类型、枚举、委托、lambda表达式、直接内存访问等等。

二、C#特点

(1)简单。C#简化了C/C++中许多复杂的特性。例如,采用“==”比较操作,从而避免C语言中与赋值操作“=”的混淆错误。

(2)面向对象。C#支持数据封装、继承、多态和接口。所有的变量和方法,包括作为应用程序入口点的main方法,都一并封装在了类定义中。

(3)现代。C#语言包括许多现代先进语言的特性。例如支持属性、泛型、lambda表达式、垃圾回收、异常处理等等。

(4)相互兼容性。C#提供对COM和基于Windows的应用程序的支持。

(5)可伸缩性和可升级性。C#的设计中充分考虑了版本控制的需要,这样的操作确保了C#程序和库能够以兼容的方式逐步演进。

三、C#用途

C#语言主要用作于构建在.NET Framework上运行的各类安全可靠的应用程序。使用C#,可以创建下列类型的应用程序与服务:

(1)控制台应用程序。基于命令行窗口的控制台应用程序,这也是本系列中最常使用到的程序。

(2)桌面应用。包括Windows窗体程序、WPF应用程序等。

(3)UWP应用。通用Windows平台应用,可以运行于任何以Windows10为内核的系统与设备上,包括但不限于桌面设备、移动设备、XBox、HoloLens以及物联网设备的应用。

(4)Web应用。包括ASP.NET程序,ASP.NET MVC、Web服务等。

(5)office平台应用程序。

(6)Windows服务。

(7)云应用。基于Microsoft Azure的应用程序。

(8)跨平台程序。

四、基础知识

控制台
1、Console.WriteLine(打印输出)、Console.ReadLine(从控制台读入一行)、Console.ReadKey(控制台暂停)。
 
2、C#语法
从上到下一条条的依次执行
大小写敏感
函数参数用()包围
两句代码之间必须用;(英文 半角)分割
单行注释// 多行注释/* */
 
3、变量
把变量看成放数据的容器
定义变量的方式:类型 变量名;
变量的类型:不同的类型存放不同的变量
变量的名字不能重复,第一个字符必须是字母或者下划线,其后的字符可以是任意的字母数字下划线
不能全部使用C#关键字(亮蓝色)
中文(类名,函数名)
 
4、运算符、表达式
+,-,*乘,/除,%求余
+可以用作字符串连接,其他不可以
++自增,--自减
括号解决运算符优先级的问题
变量可以和字面量混合运算
 
5、赋值
赋值运算符=,让左边变量的值等于右边的计算结果

六、C#常用知识点

 1、C++里定义结构型变量的时候可以省略 struct 关键字 。

2、 C++中的声明联合类型的变量可以不加 union 关键字,支持匿名联合 。

 

3、C++的枚举是一个独立的数据类型,而不是整数类型。

以上体现C++是一种强类型的语言。

(2)、函数的重载、缺省参数、哑元、内联

 1、函数重载:在同一个作用域中,函数名相同,参数表不同的函数之间构成重载关系。

重载解析原则:完全匹配>常量匹配>升级转换>标准转换>自定义转换>省略号转换

函数指针的类型决定其具体指向的重载版本,而不是由实参的类型决定。

2、如果为函数的一个参数指定了缺省值,那么该参数右边的所有参数都必须有缺省值。当定义和声明分开的情况下,缺省参数只能用在函数的声明中,且注意防止与重载发生冲突。

3、 哑元参数保证函数的向后兼容,也可以实现函数的重载(提高代码的可读性)。

4、内联函数以空间换取时间的方式保持了函数的特性,同时避免了函数调用的开销。内联函数,在编译期,以二进制代码替换。inline关键字仅仅表示希望该函数被编译为内联,究竟会不会成员内联由编译器决定。通常情况下,大函数和递归函数不会被处理为内联。

编译器:堆栈操作——内存检查、表达式计算等。

(3)引用(以下几点可以判别与指针的区别)引用实际上是一个变量的别名。

1、引用必须初始化,且必须用变量初始化。只有const型引用才能引用常量,例如:const int& rc=10; 不能对const引用做赋值。

2、不可能有空引用,必须确保引用和一块合法的存储单元关联。

3、当一个引用被初始化为指向一个对象,它就不能改变为指向另一个对象。引用是用指针来实现的,且const和指针常应用于输出参数中。

(4)类型转换

1、静态类型转换: static_cast<类型>(变量) —— 编译期时检查

检查时候:需要编译器对类型转换安全性进行检查、将void*转换为具体类型的指针。在源类型和目标类型之间只有有一个方向上可以做隐式类型转换,那么在两个方向上就都可以做静态类型转换。

2、动态类型转换:dynamic_cast<类型>(变量) —— 编译期、运行时检查

检查时候:用于在具有多态特性的父子类之间的转换

3、常量类型转换:const_cast<类型>(变量)

检查时候:去除指针或者引用上的 const 属性

4、重解释类型转换:reinterpret_cast<类型>(变量) —— 编译期、运行时均不检查

检查时候:允许对任意类型的指针进行转换、在指针和整型之间进行转换

(5)类里面的特性

一、this指针

1、一般而言,关键字this是一个指针,对于一般成员函数,它指向调用该成员函数的对象,而对于构造函数,它则指向这个正在被构造的对象。

2、在构造函数中可以通过 this 指针区分成员变量和局部变量(包括参数) 。

3、基于this指针的自身引用还被用于支持多重串联调用的场合 。

4、将this 指针作为函数的参数,实现对象间的交互 。

二、 const成员函数和const对象

1、常量型成员函数中的this指针为常量型,以此防止对成员变量的意外修改。

2、被声明为 mutable 的成员变量可以在常量型成员函数中被修改 。

3、常量型成员函数和具有相同签名的非常量型成员函数构成重载关系。

4、当常量型成员函数与非常量型成员函数构成重载关系时,非常量对象会优先选择非常量型成员函数。

5、常量型对象(包括指针和引用)只能调用其常量型成员函数。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到