C#--方法
C#的代码包装
三种实现途径:方法、类和名字空间。
• 方法是包含一系列语句的代码块。
• 类用于组合类,方法,属性。
• 将多个相关类组合成名字空间。
静态方法和静态变量
• 静态成员
在类中,使用static修饰符声明的成员称为静态成员(包括静态 变量和静态方法)。
静态成员属于类成员,其访问形式为:
类名.静态成员名 或 静态成员名 (在本类的成员方法中 )
• 静态变量
使用static修饰的字段(域)称为静态变量。
类中的静态变量仅分配一块存储区域。
静态变量在整个程序运行期间都是存在的(静态变量不能被撤销)。
• 静态方法
使用static声明的方法称为静态方法。
静态方法只允许访问类的静态成员,而不允许访问其非静态成员—— 即实例成员。
非静态方法可以访问类中的任何成员(包括静态成员和非静态成员)。
方法参数修饰符
• 方法中的参数分为值参数和引用参数。
对应四种修饰:ref,out, params和无修饰符(默认)。
无修饰符的参数和params参数-按值方式传递
ref和out修饰的参数-按引用方式传递
1. 值参数(即无任何修饰符标记的参数)
值参数采用值方式传递(即默认的传递方式)。
值传递是指在进行方法调用时,系统将实参的值(包括引用变量的值) 复制给形参变量(这时,形参实际是实参值的一个副本)。
方法中使用和修改的是“副本”,并不影响实参的值。
值传递是一种安全的传递方式。
2. 引用参数(使用ref修饰符标记的参数)
引用参数采用引用传递。
引用传递是将实参的引用(即实参变量的地址)复制给形参,这 时,形参作为实参的别名与实参共享同一内存单元。
方法中使用形参就如同使用实参,形参值变了,实参值也就变了。
3. 输出参数(使用out修饰符标记的参数)
输出参数与引用参数类似,也是采用引用传递。
在C#中,通过设置输出参数,可从方法中传回更多的数据值。
与引用参数不同,out实参变量可以不提供初值。
注意:
1. 对于输出参数,形参和实参都必须用out进行标识。
2. out实参在方法调用前不必赋以初值,但在方法中必须为out形参提供数 据值(作为该参数的返回值)
参数传递的隐式转换与强制转换
• 方法调用中,若实参值与形参类型不同,默认情况下系统会依照“类型转 换规则”隐式地将实参值转换成形参类型传递给形参。
• 例如:Math类的方法Sqrt,参数声明为double型,但可以使用整型参数调 用。Console.WriteLine(Math.Sqrt(9));
• 能正确求值,输出值为3.0。
• 在C#中,系统会依照“类型转换规则”隐式地将int值9转换成9.0,然后传 入Sqrt方法
方法重载
• 方法重载
可定义两个或两个以上的同名方法,这些方法可以完成不同的功能, 编译器能根据方法的调用形式合理选择一个方法进行调用。
• 构成重载的方法具有以下特点:
(1)方法名相同;
(2)方法参数列表不同,即满足如下三点之一即可。
方法参数数目不同;
方法拥有相同数目的参数,但参数的类型不一样;
方法拥有相同数目的参数和参数类型,但是参数类型出现的先 后顺序不一样。
特别提醒:构成重载的方法与方法的返回值类型无关
可选参数和命名参数
1. 可选参数(即带有默认值的形参)
是指在声明方法时给形参指定默 认初值,这样在调用该方法时可省略实参。
public static int Days(int day,int month,int year=2015) { … }
其中:形参year为可选参数,默认初值是2015。
例如: 方法调用-Days(18,2) 方法调用-Days(18,2,2014)
说明:可选参数必须位于所有必选参数之后,即可选参数出现在 参数列表的右端
2. 命名参数
是指调用方法时,可为实参指定一个形参名,作用是将该实参传 递给指定的形参,这样参数结合时与参数位置次序无关。
形式为:形参名:实参
如:使用命名参数调用Days方法:
Days(month:2,day:18)
Days(year:2015,month:2,day:18)
按值传递与按引用传递
• 值类型参数不都是按值方式传递,引用类型参数也并非都是按引用方式传递。
例如:
方法声明1:public void Test1(int a){…} 形参a是整数类型,属于值类型。
方法声明2:public void Test2(int[] array){…} 形参array是数组,属于引用类型。
但它们的传递方式相同,均采用“按值传递”。
.NET 框架类库
• .NET框架类库(即FCL)是生成.NET 应用程序、组件和控件的基础。
• .NET框架类库由多个预定义的名字空间构成,而每一个名字空间又是由预 定义的多个相关的类组成。
• 名字空间中类型使用点语法命名方案,全名的第一部分(最右边的点之前 的内容)是名字空间名。全名的最后一部分是类型名。
例如,System.Console表示Console类型,该类型属于System名字空间。
使用using指令时后,当使用FCL中的库类时,可不必指定名字空间名。
例如,程序中使用如下指令: using System;
程序使用System名字空间中类(如Console)时,可省略该名字空间名,而直接使 用类名。
如:Console.Writeline(); 与 System.Console.Writeline();等价。
声明的作用域
• 方法参数声明的作用域是声明所在的方法体。
• 局部变量的声明的作用域从声明点开始,到声明所在块结束为止。
• for语句首部的局部变量声明的作用域是for语句体和首部的其他表达式。
• 类中成员(如方法、属性、字段)的作用域是整个类体。因此类的非静 态方法与属性可以使用类中的任何成员,而静态方法与属性只能使用类 中的静态成员。
另外,在类的声明中,如果方法中的局部变量或参数与方法所在类中的 字段名同名,则在方法中将隐藏该字段。但可通过this.字段名的形式使 用实例中的字段。
递归
递归是计算机科学的一个重要概念,递归方法是程序设计中有效的方法,采用 递归编写程序能使程序变得简洁和清晰。
• 利用递归算法可以将一个规模较大的问题转化为规模较小的同类问题 来求解。
例如:数学上常见的一个问题-计算一个非负整数n!
计算n!,只要计算出(n-1)!,则n!=n.(n-1)! 计算(n-1)!,只要计算出(n-2)!,则(n-1)!=(n-1).(n-2)! 计算(n-2)!,只要计算出(n-3)!,则(n-2)!=(n-2).(n-3)! … 计算3!,只要计算出2!,则3!=3.(2!) 计算2!,只要计算出1!,则2!=2.(1!) 而1!=1 (注:0!定义为1)
相关文章:
C#--方法
C#的代码包装 三种实现途径:方法、类和名字空间。 • 方法是包含一系列语句的代码块。 • 类用于组合类,方法,属性。 • 将多个相关类组合成名字空间。 静态方法和静态变量 • 静态成员 在类中,使用static修饰符声明的成员称为静态…...
前端权限控制
前端权限控制 一、路由权限(控制页面访问) vue // router.js const routes [{path: /dashboard,name: Dashboard,component: () > import(/views/Dashboard.vue),meta: { requiresAuth: true, roles: [admin, manager] }},{path: /user,name: Use…...
mac下载安装jdk
背景 长时间不折腾mac全部忘记 特此记录 安装 1.下载jdk 根据需要下载对应的jdk 我直接 下载到/Applicatiions目录 https://www.oracle.com/java/technologies/downloads/#java8-mac 2.解压 cd /Applicatiions tar -zxvf jdk-8u431-macosx-x64.tar.gz 3.配置环境 …...
在线PS工具:UI设计的创新选择
对于刚踏入UI设计领域的新手来说,选择合适的在线Photoshop替代工具是至关重要的。市场上存在众多的在线设计工具,让人难以抉择。以下是10个值得尝试的在线PS工具,希望能帮助你找到最适合你的那一款。 Adobe Photoshop Photoshop是设计师们长…...
生成式AI概览与详解
1. 生成式AI概览:什么是大模型,大模型应用场景(文生文,多模态) 生成式AI(Generative AI)是指通过机器学习模型生成新的数据或内容的人工智能技术。生成式AI可以生成文本、图像、音频、视频等多种…...
数据结构与算法学习笔记----树与图的深度优先遍历
数据结构与算法学习笔记----树与图的深度优先遍历 author: 明月清了个风 first publish time: 2024.12.9 pa⭐️这里只有一道题哈哈。 Acwing 846.树的重心 给定一棵树,树中包含 n n n个节点(编号 1 ∼ n 1 \sim n 1∼n)和 n − 1 n - 1 n…...
IEEE T-RO 软体机器人手指状态估计实现两栖触觉传感
摘要:南方科技大学戴建生院士、林间院士、万芳老师、宋超阳老师团队近期在IEEE T-RO上发表了关于软体机器人手指在两栖环境中本体感知方法的论文。 近日,南方科技大学戴建生院士、林间院士、万芳老师、宋超阳老师团队在机器人顶刊IEEE T-RO上以《Propri…...
【NLP 14、激活函数 ② tanh激活函数】
学会钝感力,走向美好的方向 —— 24.12.11 一、tanh激活函数 1. tanh函数的定义 tanh是双曲正切函数(Hyperbolic Tangent),数学表达式为 其函数图像是一个S型曲线,以原点 (0,0) 为中心对称,定…...
前端如何实现签名功能
1.JS实现 前端实现签名功能,通常是通过在页面上创建一个可绘制的区域,用户可以用鼠标或触摸设备进行签名。这个区域通常是一个<canvas>元素,结合JavaScript来处理绘制和保存签名。下面是一个简单的实现步骤: 1.1. 创建HTM…...
若依将数据库更改为SQLite
文章目录 1. 添加依赖项2. 更新配置文件 application-druid.yml2.1. 配置数据源2.2. 配置连接验证 3. 更新 MybatisPlusConfig4. 解决 mapper 中使用 sysdate() 的问题4.1. 修改 BaseEntity4.2. 修改 Mapper 5. 更新 YML 配置 正文开始: 前提条件:在您的…...
CRMEB Pro版v3.2源码全开源+PC端+Uniapp前端+搭建教程
一.介绍 crmeb pro版 v3.2正式发布,全新UI重磅上线,焕然一新,不负期待!页面DIY设计功能全面升级,组件更丰富,样式设计更全面;移动端商家管理,让商城管理更便捷,还从页面…...
Docker 安装 Jenkins:2.346.3
准备:已安装Docker,已配置服务器安全组规则 1581 1、拉取镜像 [rootTseng ~]# docker pull jenkins/jenkins:2.346.3 2.346.3: Pulling from jenkins/jenkins 001c52e26ad5: Pull complete 6b8dd635df38: Pull complete 2ba4c74fd680: Pull complet…...
【OpenCV】模板匹配
理论 模板匹配是一种在较大图像中搜索和查找模板图像位置的方法。为此,OpenCV 带有一个函数 cv.matchTemplate() 。它只是在输入图像上滑动模板图像(如在 2D 卷积中),并比较模板图像下的模板和输入图像的补…...
黑马商城微服务复习(5)
MQ 一、同步调用和异步调用1. 同步调用2. 异步调用 二、RabbitMQ1. 基础使用2. 实际操作 怎么用?3. RabbitMQ虚拟主机 数据隔离4. 在JAVA中实现RabbitMQ5. 交换机种类 一、同步调用和异步调用 1. 同步调用 微服务一旦拆分,必然涉及到服务之间的相互调用ÿ…...
云原生基础设施指南:精通 Kubernetes 核心与高级用法
1. 云原生的诞生 随着互联网规模的不断增长,以及企业对敏捷开发、快速交付和高可用性的需求日益增强,传统的单体架构逐渐暴露出局限性,难以满足现代业务对动态扩展和高效迭代的要求。为此,云原生应运而生。 云原生是为云计算时代…...
人工智能概要
目录 前言1.什么是人工智能(Artificial Intelligence, AI)2.人工智能发展的三次浪潮2.1 人工智能发展的第一次浪潮2.2 人工智能发展的第二次浪潮2.3 人工智能发展的第三次浪潮 3.人工智能发展的必备三要素3.1 数据3.2 算法(algorithm…...
qt QCommandLineParser详解
1、概述 QCommandLineParser是Qt框架中提供的一个类,专门用于解析命令行参数。它简化了命令行参数的处理过程,使得开发者能够轻松定义、解析和验证命令行选项和参数。QCommandLineParser适用于需要从命令行获取输入的控制台应用程序,以及需要…...
力扣 K个一组翻转链表
K个一组翻转链表 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(ne…...
cnocr配置及训练测试
cnocr配置及训练测试 1,相关链接2,已有模型调用测试(1)下载相关模型(2)Cnstd文本检测模型(3)模型调用解析脚本 3,自定义数据集训练测试(1)标签转换…...
解决 Flutter 在 Mac 上的编译错误
解决 Flutter 在 Mac 上的编译错误 在使用 Flutter 进行项目开发并尝试在 Mac 设备上进行编译时,遇到了一系列的错误信息,这些错误信息给项目的构建与部署带来了阻碍。 一、错误详情 在编译过程中,Xcode 输出了大量的信息,其中…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...




2. 引用参数(使用ref修饰符标记的参数)











