C#基础知识

C#部分类(partial class)

使用partial关键字可以声明部分类, 部分类的作用是可以在多个文件中声明同一个类, 主要用于类比较大的时候进行拆分。不要把部分类以为是定义了多个类,其实还是一个类,只是把这个类拆分了。 在程序运行的时候编译器会把这个类合并在一起的, 这样做的好处是,当你有一个类很大的时候你可以按实现功能拆分在不同的文件中,这样就方便阅读和修改了

.Net框架

  • .NET是微软的托管代码模型,所谓的托管代码(IL)其实和JAVA的虚拟机很类似的,将C#语言“编译”成中间代码(IL)然后通过 .NET Framework 的虚拟机——被称之为通用语言运行时(Common Language Runtime, CLR)——执行。
    C#和.NET框架
    C#基础知识_第1张图片

  • .NET Framework 4.8 是 .NET Framework 的最后一个版本,不会再发布后续版本。公共语言运行时(CLR) 是 .NET Framework 的基础。在组件运行时,CLR除了负责满足此组件在其他组件上可能具有的依赖项外,还负责管理内存分配、启动和停止线程和进程,以及强制执行安全策略。
    C#基础知识_第2张图片

托管与非托管

  • 受托管的代码不能直接写内存,是安全的,而非托管代码是非安全代码,可以使用指针操作内存。
    一般的项目使用托管代码就行了,对于一些对速度要求高的部分功能可以考虑使用非安全代码,使用指针等读写内存,而对于整个项目来说还是受托管的安全代码。
    托管和非托管的区别

  • C#调用C++的dll可以有两种方法:
    1、非托管C++创建的dll库,需要用静态方法调用;
    2、直接使用CLR,生成托管C++dll库。
    很多时候在项目中需要通过C++调用C#的dll,或者反过来调用。首先明白一个前提:C#是托管型代码。C++是非托管型代码
    托管型代码的对象在托管堆上分配内存,创建的对象由虚拟机托管。(C# )
    非托管型代码对象有实际的内存地址,创建的对象必须自己来管理和释放。(C++)

C#不同

  • C#内存管理:由底层.NET框架进行自动内存垃圾回收

  • C#的语法格式和JAVA十分类似,可以用于开发Windows程序,也就是我们熟悉的exe程序。C#的源程序并不是被编译成二进制可执行形式,而是一种中间语言(IL),类似于JAVA字节码。

  • 对象不能被显式释放,代替为当不存在被引用时通过垃圾回收器回收

  • 只允许单重继承,但是一个类可以实现多个接口

  • C#比C++更加类型安全。默认的安全转换是隐式转换,例如加宽整型和从派生类转换为基类。而布尔型同整型,及枚举型同整型不允许隐式转换,非空指针(通过引用相似对象)同用户定义类型的隐式转换必段被显式的确定,不同于C++的复制构造函数

  • 数组声明语法不同(“int[] a = new int[5]” 而不是 “int a[5]”)

  • C#中没有模版,但是在C# 2.0中引入了泛型,并且支持一些C++模版不支持的特性。比如泛型参数中的类型约束。另一方面,表达式不能像C++模版中被用于类型参数

  • 属性支持,使用类似访问成员的方式调用

  • 在C# 2.0中的新特性有:
    局部类型(将类实现分在多个文件中)
    泛型或参数化类型
    一种新形式的迭代器,类似于Python使用函数式编程风格的yield关键字
    匿名方法提供了closure功能

  • C# 3.0 新特性
    Lamda 表达法(Lambda expressions)
    匿名变量
    扩展方法(Extension methods)
    匿名型别(Anonymous types)
    Linq 查询
    表达式树(Expression Trees)

你可能感兴趣的:(算法)