• C#入门经典——读书记录


    基础

    .NET Framework

    1. 面向对象的平台
    2. 组成
      (1)公共语言运行库(Common Language Runtime,CLR):管理应用的执行(内存管理、代码安全验证、代码执行、垃圾收集等)
      (2)基类库(Base Class Libraries,BCL):工具类
    3. 执行
      (1)先编译成通用中间语言(Common Intermediate Language,CIL),由Visual Studio完成;运行时,再由即时编译器(Just-In-Time,JIT)编译成本机代码(native code,目标操作系统能理解的语言)
      (2)CIL代码存储在程序集(assembly)中:可执行(.exe)文件和库(.dll)文件
    4. CLR托管代码
      (1)管理内存、处理安全性等,C#只能写托管环境下运行的代码,C++可以编写非托管类型(如访问操作系统的底层功能)
      (2)垃圾回收(Garbage collection, GC)

    > 这里是引用在这里插入图片描述C#图解教程第一章 C#和.NET框架【听好的看看】

    Java是先通过编译器编译成Bytecode,然后在运行时通过解释器将Bytecode解释成机器码;
    C#是先通过编译器将C#代码编译成CIL,然后通过CLR将IL编译成机器代码。
    所以严格来说Java是一种先编译后解释的语言,而C#是一门纯编译语言,且需要编译两次。

    在这里插入图片描述

    C#基础知识

    1. 特点(安全、稳定、简单)
      (1)面向对象(Object-Oriented Programming,OOP),封装、继承(C#仅支持单继承,提供了接口来解决多重继承)、多态
      (2)不允许直接操作内存,去掉了指针操作
      (3)比 C、C++、Java 提供了更多的数据类型,每个数据类型都是固定大小的
      (4)与Web紧密结合,支持绝大多数的Web标准,例如HTML、XML等
      (5)提供了方便的功能,如垃圾收集、类型安全、版本控制等

    一些关键字

    C#学习笔记-方法参数params、ref和in、out

    ref

    在方法的参数列表中使用 ref 关键字时,它指示参数按引用传递,而非按值传递。

    void Method(ref int refArgument)
    {
        refArgument = refArgument + 44;
    }
    int number = 1;  // 需要初始化,不能是常量 const int number = 1;
    Method(ref number);
    Console.WriteLine(number); // Output: 45
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. 不能用在常量上;
    2. 不能用在没有初始化的变量上;
    3. 属性不是变量,是方法,不能传递 ref 参数;
    4. 通过引用传递参数时,在变量声明前必须要ref关键词(数组这种不用);
    // 有问题,int x -- ref int x
    ref int F(int x)
    {
    	return ref x;
    }
    
    // 没问题
    ref int F()
    {
    	int[] a = {1};
    	return ref a[0];
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    out

    1. 不需要初始化,但是在方法返回前必须赋值;
    2. 方法定义和调用方法均必须显式使用 out 关键字;

    in

    in 参数修饰符(C# 参考)

    in 关键字会导致按引用传递参数,但确保不修改参数。
    按引用传递这些参数可以避免(可能产生的)高昂的复制成本。

    1. 临时变量允许将编译时常数作为 in 参数;
    2. 存在从实参类型到形参类型的隐式转换时,临时变量允许使用实参;
    3. 临时变量允许使用属性或 in 参数的其他表达式(没有看明白。。。);
    4. in关键字可以隐式使用,如果存在方法重载,in就不能隐式使用了。

    ref、in和out三者异同

    1. 传递到 ref 或 in 形参的实参必须先经过初始化,然后才能传递;out 形参在传递之前,不需要显式初始化该形参的实参。
    2. in 参数无法通过调用的方法进行修改;out 参数必须由调用的方法进行修改;而 ref 参数是可以修改的。
    3. 在其他要求签名匹配的情况下(如隐藏或重写),in、ref 和 out 是签名的一部分,相互之间不匹配。
    4. 不能将 ref、in 和 out 关键字用于以下几种方法:
      (1)异步方法,通过使用 async 修饰符定义;
      (2)迭代器方法,包括 yield return 或 yield break 语句。
    5. 扩展方法还限制了对以下这些关键字的使用:
      (1)不能对扩展方法的第一个参数使用 out 关键字;
      (2)当参数不是结构或是不被约束为结构的泛型类型时,不能对扩展方法的第一个参数使用 ref 关键字;
      (3)除非第一个参数是结构,否则不能使用 in 关键字。 即使约束为结构,也不能对任何泛型类型使用 in 关键字。
  • 相关阅读:
    Go 常用标准库之 fmt 介绍与基本使用
    C++向量夹角公式(带正负)
    【AcWing】AcWing 5180. 正方形泳池(秋季每日一题2023)(排序 + 边枚举边更新)
    课堂教学观察方法与技术——阅读笔记
    中国石油大学(北京)-《 油气田开发方案设计》第一阶段在线作业
    Linux学习
    vue支付项目-APP支付宝支付功能
    160_技巧_Power BI 新函数-计算工作日天数
    iOS设置作为蓝牙外设
    3000元口碑好的投影仪推荐哪款?双11口碑好的投影仪推荐当贝NEW D3X
  • 原文地址:https://blog.csdn.net/weixin_44013557/article/details/126409856