C# 语法笔记

news2024/11/18 1:43:27

1.ref、out:参数传递的两种方式

ref:引用传递

using System;
namespace CalculatorApplication
{
   class NumberManipulator
   {
      public void swap(ref int x, ref int y)
      {
         int temp;

         temp = x; /* 保存 x 的值 */
         x = y;    /* 把 y 赋值给 x */
         y = temp; /* 把 temp 赋值给 y */
       }
   
      static void Main(string[] args)
      {
         NumberManipulator n = new NumberManipulator();
         /* 局部变量定义 */
         int a = 100;
         int b = 200;

         Console.WriteLine("在交换之前,a 的值: {0}", a);
         Console.WriteLine("在交换之前,b 的值: {0}", b);

         /* 调用函数来交换值 */
         n.swap(ref a, ref b);

         Console.WriteLine("在交换之后,a 的值: {0}", a);
         Console.WriteLine("在交换之后,b 的值: {0}", b);
 
         Console.ReadLine();

      }
   }
}

out: 输出传参

假设在函数调用前变量a的值为5;

此函数的实现使用输出传参,在方法内第一次修改a=1,第二次修改a=2,第三次修改为a=3,那么a的值会在执行此函数后为3;

unity中的射线检测的第三个参数就是通过输出值传递被击中

物体的信息

public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance);

还有一种就是最普通的值传递;

2.如何给bool赋值null

有些类型不能为空值,int,bool,float等;

使用"?"可让它们变成可空类型

赋值方法 bool? a=null;

a从bool类型的值变为可空bool值;

3."??"运算符

如果第一个操作数的值为 null,则运算符返回第二个操作数的值,否则返回第一个操作数的值

例子:a=b??c 如果b等于null则a等于c(不管c的值是不是null)

4、交错数组

5、数组作为参数的两种方式

函数的参数中有数组时,可以传递数组的指针和将数组整体作为参数.

数组指针作为参数:

数组整体作为参数:

 需要 在方法定义时配上关键字params;

6.结构体

与c和c++的结构体有所不同,参考文档

结构体的对象存储在栈中,适合体积小且简单的类型,访问速度快。

类的对象存储在堆中,适合体积大且复杂的语句块,但访问速度慢,栈中只存有对象的引用。

例如:

有一个类是Book类, 执行语句Book a;

a只是Book类的一个引用还没有分配内存,a在栈中。

当a=new Book()时,才为a分配了一个对象,这个对象在堆中,a作为内存位置的引用还是在栈中;

7.枚举(enum)

作用就是获取一个列表内成员在当前列表的序号,从0开始;

8.访问修饰符

用于封装后对封装数据的权限设置

五种:public,private,protected,Internal,protected Internal.

前三个和c++没啥区别;

类的默认就是Internal,也就是所有程序里都可以用这个类;

protected Internal“访问限于当前程序集或派生自包含类的类型”,目前没看见过这个;

9.类的成员函数

构造函数+析构函数+其他函数

构造函数:无返回值(也没有void),和类同名,默认无参数,可以手动实现带参构造;

析构函数:和类同名,前面带一个 “~”,无法继承无法重载,在类被销毁时调用;

2023.12.6补充:

除了构造函数,类的成员函数默认都为private;

10.静态成员

有点像单例,同一个类的对象再怎么多,这个类的静态成员的实例都不会随着对象的生成而增多,永远只有一个;

静态成员在对象生成前就已经存在了;

所以可以直接通过类名来访问静态成员;

而且静态函数只能访问静态变量;

可以用来实现Main函数;

11、多态(重点内容)

同一个方法,能实现不同的效果;

静态多态:

静态多态理解为函数的多态;

同一个函数,实现不同的效果 =>函数重载,同一个函数,参数不同,效果不同。

动态多态:

动态多态理解为类的多态;

依靠抽象类和虚方法来实现:abstract和virtual

理解:一个类声明为抽象类(加上abstract),其派生类可以重写其内部的函数;

在抽象类里声明为abstract的函数不能写出函数主体,只能声明,不能定义,不然会报错

派生类不实现重写抽象类的抽象函数会报错

重写抽象函数时无法改变访问修饰符

将抽象函数声明为Virtual可以在不同的派生类里实现不同的方法。

实测感觉直接用abstract也可以实现Virtual的这个功能,不知道Virtual还有没有其他特殊用法

2023.12.6补充:

abstract修饰函数的申明,子类必须去定义基类里申明为abstract的函数,因为去定义这个函数;

virtuai修饰整个函数,子类可以去重写也可以不重写;

override修饰的函数,子类里必须去重写这个函数;

12、接口

关键字:interface

接口的作用就是使得继承自这个接口的类有相似的结构,都会实现接口内的函数这个特性就使得子类都有相似的结构;

13、预处理命令

很实用的是,#region和#endregion组合可以实现自定义代码块的折叠;

#region 注释

代码

#endregion

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1295099.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【无线网络技术】——无线局域网(学习笔记)

📖 前言:本章首先介绍无线局域网的基本概念,然后详细介绍IEEE 802.11的基本工作原理,侧重于媒体访问控制和一跳范围内的通信技术。 目录 🕒 1. 概述🕘 1.1 覆盖范围🕘 1.2 特点🕘 1.…

《opencv实用探索·十五》inRange二值化图像

opencv接口如下: void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst);函数实现二值化功能,主要是将在两个阈值内的像素值设置为白色(255),而不在阈值区间内的像素值设置为黑色&am…

命令行参数(C语言)

目录 什么是命令行参数 main函数的可执行参数 不传参打印 传参打印 IDE传参 cmd传参 命令行参数的应用(文件拷贝) 什么是命令行参数 概念:命令行参数指的是在运行可执行文件时提供给程序的额外输入信息。它们通常以字符串形式出现&am…

【MATLAB】MODWT分解+FFT+HHT组合算法

有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 MODWT分解FFTHHT组合算法是一种综合性的信号处理方法,它结合了经验小波变换(Empirical Wavelet Transform,EWT)、快速傅里叶变换&#xff…

Dexie 查询sql速度优化

Dexie查询速度慢的原因主要一个优化点是复杂查询下的count执行。 以下摘自Dexie官方文档:https://dexie.org/docs/Collection/Collection.count() If executed on simple queries, the native IndexedDB ObjectStore count() method will be called (fast execution…

C# 数据的保存和提取(.TXT格式)

红色部分的才是最终版 一、将页面内容保存到文件中 第一步 创建Visual的Windows窗体应用,使用的是 第二步 创建几个Label控件、TextBox控件、以及Button按钮,而TextBox控件放入Panel中 第三步 先对写法进行了解,了解保存的语句 StreamWriter sw= new StreamWriter(TXT…

Django讲课笔记01:初探Django框架

文章目录 一、学习目标二、课程导入(一)课程简介(二)课程目标(三)适用人群(四)教学方式(五)评估方式(六)参考教材 三、新课讲授&#…

全自动影像仪图像自动匹配对焦,测量一致性好

全自动影像仪使用自动边缘提取、自动匹配、自动对焦、测量合成等先进的机器视觉和人工智能技术,能实现高精度的测量与自动对焦。这些技术提高测量的连贯性和准确性,进而提升生产效率与产品质量。 此外,全自动影像仪还具有多种功能&#xff0…

【FreeRTOS】信号量——简介、常用API函数、注意事项、项目实现

在FreeRTOS中,信号量是一种非常重要的同步机制,用于实现任务间的互斥访问和同步操作。通过信号量,不同的任务可以安全地共享资源,避免竞争和冲突,从而确保系统的稳定性和可靠性。本篇博客将介绍FreeRTOS中信号量的基本…

JS原生实现浏览器滚动条滚动侧边栏高亮响应

目录 演示 ​编辑 需求 代码 css html script 代码解释 1、获取所有link-content 2、定义一个rectContent数组,然后循环allContents调用getClientRects()[0]获取每个link-content元素与浏览器视口的关系 3、为数组追加link-content,用于设置侧…

【EMNLP 2023】面向Stable Diffusion的自动Prompt工程算法BeautifulPrompt

近日,阿里云人工智能平台PAI与华南理工大学朱金辉教授团队合作在自然语言处理顶级会议EMNLP2023上发表了BeautifulPrompt的深度生成模型,可以从简单的图片描述中生成高质量的提示词,从而使文生图模型能够生成更美观的图像。BeautifulPrompt通…

谷歌Gemini刚发就惹质疑:测试标准有失偏颇,效果视频疑似剪辑

梦晨 克雷西 发自 凹非寺 量子位 | 公众号 QbitAI 谷歌憋了许久的大招,双子座Gemini大模型终于发布!其中一图一视频最引人注目: 一图,MMLU多任务语言理解数据集测试,Gemini Ultra不光超越GPT-4,甚至超越了…

拆解贝医生冲牙器F3,换电池

是这款伸缩式的,如下图, 用了差不多两年,终于充不了电,而且不能开机,估计是电池坏了,拆开试一下。 一、拆解 拆解难度不算大,本来以为这东西为了防水肯定要用一堆胶水,没想到只是卡…

十大最好猫主食罐头有哪些品牌?排名前五猫主食罐头品牌推荐

我发现不少人有这样的困扰!买到各种数值都很好的猫罐头后,猫咪一点都不吃。或者是猫咪吃了猫罐头之后,吃了一段时间后就软便身体不舒服。 猫罐头侠登场!养猫这么久了我就把我吃的不错的猫罐头分享一下!别纠结了&#…

❤ Mac IDEA使用并运行项目

❤ IDEA导入项目并运行 Mac IDEA使用 (1) 仓库导入 通过获取giett仓库包的url,在idea中导入项目 在gitee里获取项目的ur打开idea,点击 File->new->Project from Version Control (2) 创建数据库ry并导入数据脚本 (3)修改配…

Altair Radioss碰撞 安全与冲击 衡祖仿真

Altair Radioss是解决瞬态加载工况下非线性问题的领先的结构分析求解器。其具备高扩展性、高品质、高鲁棒性,以及诸多功能:多域求解技术、高级材料功能(复合材料)等。Radioss求解器被广泛应用于汽车、航空航天、电子/家电、包装、轨道机车、生物医疗、能…

harmony开发之Text组件的使用

TextInput、TextArea是输入框组件,通常用于响应用户的输入操作,比如评论区的输入、聊天框的输入、表格的输入等,也可以结合其它组件构建功能页面,例如登录注册页面。 图片来源黑马程序员 Text组件的使用: 文本显示组…

【C++】开源:Boost配置文件解析库PropertyTree配置使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Boost配置文件解析库PropertyTree配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注…

js写旋转的时钟动态

目录 1、css代码 2.html代码 3.js代码 1、css代码 .box {position: relative;width: 600px;height: 600px;background: url(./images/clock.jpg) no-repeat center;}.hour,.minute,.second {position: absolute;left: 0;top: 0;width: 100%;height: 100%;}.hour {background…

RHEL8_Linux访问NFS存储及自动挂载

本章主要介绍NFS客户端的使用 创建FNS服务器并通过NFS共享一个目录在客户端上访问NFS共享的目录自动挂载的配置和使用 1.访问NFS存储 前面介绍了本地存储,本章就来介绍如何使用网络上的存储设备。NFS即网络文件系统,所实现的是 Linux 和 Linux 之间的共…