C#简介
C#(See Sharp)是一种完全面向对象的语言,需要自己定义类型以及行为
可以从与C++的区别入手:
- 作为C++的后续版,C#能做到的C++都能做到,但C++更为复杂,C#主打的就是一个效率
- C#被研发初就是用来编写.NET平台,.NET是一个十分模糊的概念,它是一个跨平台开源开发人员平台,可用于构建多种应用程序。.NET包含一类库和CLR虚执行系统,过多的不赘述,总之C#所编写的源代码会被编译为符合CLI规范的中间语言IL,IL会在C#程序执行时被CLR编译为本机指令。当然对于C#本身这种涉及的内容太多,略微了解即可,有点类似于C++编译的一系列操作
- C++不允许在一个构造函数中调用另外一个构造函数,而C#允许
- 上述只是用于初步了解的部分特点,当然最重要的是C#是完全面向对象的语言,更注重实际应用
.NET主要功能
垃圾回收(自动内存管理)
为应用程序管理内存的分配和释放,意味着对开发人员来说,不必编写执行内存管理任务的代码,可以不用考虑内存管理的经典问题,例如忘记释放对象并导致内存泄漏,或尝试访问已释放对象的内存
代码质量分析
和visual studio中错误分析类型的东西
...(待补充)
Hello world
using System;
class Hello
{
static void Main()
{
Console.WriteLine("Hello, World");
}
}
using System引用System命名空间,提供了一种用于组织C#程序和库的分层方法。命名空间包含类型和其他命名空间,如System(Console类和IO、Collections命名空间)
看起来像是C++中using与include的归类版
声明Hello类,其中的成员main用static修饰符进行声明,按约定Main静态函数是C#程序的入口点
Console类中的WriteLine函数用于输出,由标准类库提供,默认情况下编译器会自动引用标准类库。
由于System命名空间的引用,System.Console.WriteLine
可直接写为Console.WriteLine
类型和变量
类型
两种类型:值类型和引用类型
值类型变量包含数据
引用类型的变量存储对数据/对象的引用
- 两个变量可以引用同一个对象
- 对一个变量执行的运算可能会影响另一个变量引用的对象
标识符是变量名称,如果前缀为@,则可能是C#保留字
一些文档内容:
值类型
简单类型
- 有符号整型:
sbyte
、short
、int
、long
- 无符号整型:
byte
、ushort
、uint
、ulong
- Unicode 字符:
char
,表示 UTF-16 代码单元- IEEE 二进制浮点:
float
、double
- 高精度十进制浮点数:
decimal
- 布尔值:
bool
,表示布尔值(true
或false
)枚举类型
enum E {...}
格式的用户定义类型。enum
类型是一种包含已命名常量的独特类型。 每个enum
类型都有一个基础类型(必须是八种整型类型之一)。enum
类型的值集与基础类型的值集相同。结构类型
- 格式为
struct S {...}
的用户定义类型可以为 null 的值类型
- 值为
null
的其他所有值类型的扩展元组值类型
- 格式为
(T1, T2, ...)
的用户定义类型引用类型
类类型
- 其他所有类型的最终基类:
object
- Unicode 字符串:
string
,表示 UTF-16 代码单元序列- 格式为
class C {...}
的用户定义类型接口类型
- 格式为
interface I {...}
的用户定义类型数组类型
- 一维、多维和交错。 例如:
int[]
、int[,]
和int[][]
委托类型
- 格式为
delegate int D(...)
的用户定义类型
类型声明
class
类型定义包含数据成员(字段)和函数成员的数据结构。支持单元继承和多态struct
类型定义包含数据成员和函数成员的结构(类似于class)
区别如下:
struct为值类型,class为对象类型
struct不能被继承,class能被继承
struct 默认的访问权限是public,而class 默认的访问权限是private
......
值类型适合存储供 C#应用程序操作的数据
引用类型应该用于定义应用程序的行为
interface
类型定义为一组已命名的公共成员。 实现interface
的class
或struct
必须提供接口成员的实现代码。interface
可以继承自多个基接口,class
和struct
可以实现多个接口。delegate
类型表示引用包含特定参数列表和返回类型的方法。
C# 采用统一的类型系统,因此任意类型的值都可视为 object
。 每种 C# 类型都直接或间接地派生自 object
类类型,而 object
是所有类型的最终基类。 只需将值视为类型 object
,即可将引用类型的值视为对象。 通过执行装箱和取消装箱操作,可以将值类型的值视为对象。 在以下示例中,int
值被转换成 object
,然后又恢复成 int
。
int i = 123;
object o = i; // Boxing
int j = (int)o; // Unboxing