C#基础之方法
文章目录
- 1 方法
- 1.1 定义方法
- 1.2 参数传递
- 1.2.1 按值传递参数
- 1.2.2 按引用传递参数
- 1.2.3 按输出传递参数
- 1.2.4 可变参数 params
- 1.2.5 具名参数
- 1.2.6 可选参数
- 1.3 匿名方法
- 1.3.1 Lambda 表达式
- 1.3.1.1 定义
- 1.3.1.2 常用类型
- 1.3.1.3 Lambda 表达式与 LINQ
- 1.3.1.4 Lambda 表达式的捕获变量
- 1.4 外部方法
- 1.4.1 定义
- 1.4.2 使用
- 1.5 扩展方法
- 1.5.1 定义
- 1.5.2 操作示例
1 方法
一个方法是把一些相关的语句组织在一起,用来执行一个任务的语句块。每一个 C# 程序至少有一个带有 Main
方法的类。
1.1 定义方法
当定义一个方法时,从根本上说是在声明它的结构的元素。在 C# 中,定义方法的语法如下:
<Access Specifier> <Return Type> <Method Name>(Parameter List)
{Method Body
}
下面是方法的各个元素:
Access Specifier
:访问修饰符,这个决定了变量或方法对于另一个类的可见性。Return type
:返回类型,一个方法可以返回一个值。返回类型是方法返回的值的数据类型。如果方法不返回任何值,则返回类型为 void。Method name
:方法名称,是一个唯一的标识符,且是大小写敏感的。它不能与类中声明的其他标识符相同。Parameter list
:参数列表,使用圆括号括起来,该参数是用来传递和接收方法的数据。参数列表是指方法的参数类型、顺序和数量。参数是可选的,也就是说,一个方法可能不包含参数。Method body
:方法主体,包含了完成任务所需的指令集。
下面的代码片段显示一个函数 FindMax,它接受两个整数值,并返回两个中的较大值。它有 public 访问修饰符,所以它可以使用类的实例从类的外部进行访问。
class NumberManipulator
{public int FindMax(int num1, int num2){/* 局部变量声明 */int result;if (num1 > num2)result = num1;elseresult = num2;return result;}...
}
1.2 参数传递
当调用带有参数的方法时,需要向方法传递参数。在 C# 中,有三种向方法传递参数的方式:
方式 | 描述 |
---|---|
值参数 | 这种方式复制参数的实际值给函数的形式参数,实参和形参使用的是两个不同内存中的值。在这种情况下,当形参的值发生改变时,不会影响实参的值,从而保证了实参数据的安全。 |
引用参数 | 这种方式复制参数的内存位置的引用给形式参数。这意味着,当形参的值发生改变时,同时也改变实参的值。 |
输出参数 | 这种方式可以返回多个值。 |
1.2.1 按值传递参数
这是参数传递的默认方式。在这种方式下,当调用一个方法时,会为每个值参数创建一个新的存储位置。
实际参数的值会复制给形参,实参和形参使用的是两个不同内存中的值。所以,当形参的值发生改变时,不会影响实参的值,从而保证了实参数据的安全。下面的实例演示了这个概念:
using System;
namespace CalculatorApplication
{class NumberManipulator{public void swap(int x, 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(a, b);Console.WriteLine("在交换之后,a 的值: {0}", a);Console.WriteLine("在交换之后,b 的值: {0}", b);Console.ReadLine();}}
}结果:
在交换之前,a 的值:100
在交换之前,b 的值:200
在交换之后,a 的值:100
在交换之后,b 的值:200
结果表明,即使在函数内改变了值,值也没有发生任何的变化。
1.2.2 按引用传递参数
引用参数是一个对变量的内存位置的引用。当按引用传递参数时,与值参数不同的是,它不会为这些参数创建一个新的存储位置。引用参数表示与提供给方法的实际参数具有相同的内存位置。
在 C# 中,使用 ref
关键字声明引用参数。使用 ref
,可以让方法直接操作调用方变量本身,而不是它的副本。
ref
的作用:
- 普通传值(按值传递):方法接收的是变量的副本,对副本的修改不会影响原变量。
- 引用传递(ref 传递):方法接收的是变量的引用,对引用指向的内存进行修改,会影响原变量。
栈与堆的关系:
- 值类型(如 int, float)通常存储在栈上。引用传递时,传递的是栈上变量的引用。
- 引用类型(如对象、数组)存储在堆上。引用传递时,
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();}}
}
结果:
在交换之前,a 的值:100
在交换之前,b 的值:200
在交换之后,a 的值:200
在交换之后,b 的值:100
结果表明,swap 函数内的值改变了,且这个改变可以在 Main 函数中反映出来。
1.2.3 按输出传递参数
return
语句可用于只从函数中返回一个值。但是,可以使用 输出参数 out
关键字来从函数中返回两个值。输出参数会把方法输出的数据赋给自己,其他方面与引用参数相似。
下面的实例演示了这点:
using System;namespace CalculatorApplication
{class NumberManipulator{public void getValue(out int x ){int temp = 5;x = temp;}static void Main(string[] args){NumberManipulator n = new NumberManipulator();/* 局部变量定义 */int a = 100;Console.WriteLine("在方法调用之前,a 的值: {0}", a);/* 调用函数来获取值 */n.getValue(out a);Console.WriteLine("在方法调用之后,a 的值: {0}", a);Console.ReadLine();}}
}结果:
在方法调用之前,a 的值: 100
在方法调用之后,a 的值: 5
1.2.4 可变参数 params
当声明一个方法时,不能确定要传递给函数作为参数的参数数目。C# 参数数组解决了这个问题,参数数组
通常用于传递未知数量的参数给函数。
在使用数组作为形参时,C# 提供了 params
关键字,使调用数组为形参的方法时,既可以传递数组实参,也可以传递一组数组元素。但是,一个方法中只能有一个可变参数 params
,且必须在形参列表最后一个位置
params
的使用格式为:
public 返回类型 方法名称( params 类型名称[] 数组名称 )
实例
using System;
namespace ArrayApplication
{class ParamArray{public int AddElements(params int[] arr){int sum = 0;foreach (int i in arr){sum += i;}return sum;}}class TestClass{static void Main(string[] args){ParamArray app = new ParamArray();int sum = app.AddElements(512, 720, 250, 567, 889);Console.WriteLine("总和是: {0}", sum);Console.ReadKey();}}
}结果:
总和是: 2938
1.2.5 具名参数
具名参数
允许调用方法时显式指定参数名称,而不是按位置传递参数
。这对有多个参数的方法特别有用,因为可以选择性地设置某些参数,而忽略其他参数。
优点:
- 提高代码可读性。
- 避免因参数顺序出错而导致的问题
void PrintDetails(string name, int age, string city)
{Console.WriteLine($"Name: {name}, Age: {age}, City: {city}");
}// 具名参数调用
PrintDetails(name: "Alice", age: 25, city: "New York");// 顺序可以随意调整
PrintDetails(city: "Los Angeles", name: "Bob", age: 30);
1.2.6 可选参数
可选参数
允许为方法的某些参数指定默认值,这样调用方法时可以省略这些参数
void Greet(string name, string greeting = "Hello")
{Console.WriteLine($"{greeting}, {name}!");
}// 调用时省略可选参数
Greet("Alice"); // 输出:Hello, Alice!// 调用时显式传递可选参数
Greet("Bob", "Hi"); // 输出:Hi, Bob!
1.3 匿名方法
在 C# 中,匿名函数
是一种没有名字的方法,可以在代码中定义和使用。
匿名方法(Anonymous methods
) 提供了一种传递代码块作为委托参数的技术。
在匿名方法中不需要指定返回类型,它是从方法主体内的 return
语句推断的。
1.3.1 Lambda 表达式
1.3.1.1 定义
Lambda
表达式是一个简洁的语法,用于创建匿名函数。它们通常用于 LINQ
查询和委托。
(parameters) => expression
// 或
(parameters) => { statement; }
其中:
parameters
:传递给Lambda
表达式的参数,可以省略括号 ()(当只有一个参数时)。=>
:称为goes to
操作符,分隔参数和方法体。expression 或 statements
:要执行的代码,简单情况可以用一个表达式,复杂逻辑可以使用代码块{}
。
注意:
- 作用范围:Lambda 表达式可以捕获外部变量,但要小心,这可能导致意外的闭包效果。
- 类型推断:C# 支持类型推断,Lambda 表达式的参数类型在多数情况下可以自动推断,无需显式声明类型。
- 简洁性:对于简单逻辑,可以直接写成 Lambda 表达式;对于复杂逻辑,最好用命名方法,避免代码难以阅读。
实例
// 示例:使用 Lambda 表达式定义一个委托
Func<int, int, int> add = (a, b) => a + b;
Console.WriteLine(add(2, 3)); // 输出 5// 示例:使用 Lambda 表达式过滤数组中的元素
int[] numbers = { 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(n => n % 2 == 0);
foreach (var num in evenNumbers)
{Console.WriteLine(num); // 输出 2 4
}
1.3.1.2 常用类型
Lambda
表达式通常用于定义委托或作为方法的参数,例如:
Func
:定义具有返回值的Lambda
表达式。Action
:定义不具有返回值的Lambda
表达式。Predicate
:定义返回bool
类型的Lambda
表达式,常用于条件判断。
示例:不同类型的 Lambda 表达式
Func<int, int, int> multiply = (x, y) => x * y;
Console.WriteLine(multiply(3, 4)); // 输出:12Action<string> greet = name => Console.WriteLine($"Hello, {name}!");
greet("Alice"); // 输出:Hello, Alice!Predicate<int> isEven = n => n % 2 == 0;
Console.WriteLine(isEven(4)); // 输出:True
1.3.1.3 Lambda 表达式与 LINQ
Lambda
表达式在 LINQ
查询中常用于指定筛选条件、排序方式等。例如,对一个 List<int>
进行筛选和排序:
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 };
var evenNumbers = numbers.Where(n => n % 2 == 0).OrderBy(n => n);foreach (var num in evenNumbers)
{Console.WriteLine(num); // 输出:2, 4, 6
}
1.3.1.4 Lambda 表达式的捕获变量
Lambda
表达式可以捕获
外部作用域中的变量。捕获的变量与闭包类似,生命周期与 Lambda
表达式一致。
int factor = 3;
Func<int, int> multiplyByFactor = n => n * factor;
Console.WriteLine(multiplyByFactor(5)); // 输出:15
在这里,factor 是一个外部变量,multiplyByFactor 捕获了 factor,并在 Lambda 表达式中使用它。
1.4 外部方法
1.4.1 定义
外部方法是指那些用非托管代码
(如C或C++
)编写的函数,这些函数被编译成动态链接库(DLL
)或其他形式的可执行文件。C#
程序通过P/Invoke(Platform Invocation Services)
机制调用这些外部方法,P/Invoke
允许托管代码(如C#)调用非托管代码。
在C#中,调用外部方法(也称为外部函数
或P/Invoke方法)之前需要先声明,这是因为C#
是一种类型安全的语言,它需要在编译时知道方法的签名(即方法的名称、参数类型和返回类型)。外部方法通常指的是那些用非托管代码
(如C或C++
编写的DLL
文件)实现的方法。
为什么需要先声明:
- 类型安全:
C#
编译器需要在编译时知道方法的签名,以确保调用时传递的参数类型和数量是正确的。 - 元数据:声明外部方法时,可以提供关于方法的元数据(如
DLL
名称、入口点名称等),这些信息是运行时环境(CLR,Common Language Runtime
)用来加载和调用非托管代码所必需的。 - 编译时检查:通过声明外部方法,编译器可以在编译时检查调用的正确性,减少运行时错误。
1.4.2 使用
在C#中,可以使用DllImport
属性来声明外部方法。DllImport
属性指定了包含该方法的DLL
文件的名称和入口点(即方法的名称)。以下是一个简单的例子:
using System;
using System.Runtime.InteropServices; class Program
{ // 声明外部方法 [DllImport("kernel32.dll", CharSet = CharSet.Auto)] public static extern IntPtr GetModuleHandle(string lpModuleName); static void Main() { // 调用外部方法 IntPtr handle = GetModuleHandle("kernel32.dll"); Console.WriteLine("Handle: " + handle); }
}
在这个例子中,GetModuleHandle
是一个外部方法,它位于kernel32.dll
中。我们使用DllImport
特性来声明这个方法,并在Main方法中调用它。
注意事项:
- 字符集:使用
CharSet
属性指定字符集(如CharSet.Auto
、CharSet.Ansi
或CharSet.Unicode
),这会影响字符串参数的传递方式。 - 调用约定:默认情况下,
P/Invoke
使用stdcall
调用约定。如果外部方法使用其他调用约定(如cdecl),需要使用CallingConvention
枚举来指定。 - 错误处理:调用外部方法时,可能会遇到各种错误(如找不到DLL、方法签名不匹配等)。因此,适当的错误处理是非常重要的。
1.5 扩展方法
1.5.1 定义
在 C#
中,扩展方法(Extension Method
)是允许在不修改类代码或创建子类的情况下,为现有类型添加
新方法的一种机制。扩展方法
本质上是一个静态方法
,但它的调用方式
和实例方法
类似,使得我们可以在不修改源代码的情况下增强类的功能。
扩展方法必须满足以下条件:
- 必须定义在
静态类
中 - 方法本身必须是
静态的
- 第一个参数必须使用
this
关键字修饰,并指定参数类型
即要扩展的类型
this
关键字的作用:
- 标识扩展方法:
this
关键字告诉编译器这是一个扩展方法
,而不是普通的静态方法
。 - 指定扩展类型:
this
后面的参数类型就是要扩展的类型。 - 调用方式:可以像调用实例方法一样调用扩展方法。
扩展方法的优点:
- 无需修改原类:无需更改或继承现有类型即可添加新方法。
- 提高代码可读性:扩展方法让代码更具可读性,因为它们可以像实例方法一样调用。
- 方便维护:扩展方法通常集中在一个静态类中,有助于代码模块化和维护。
注意事项:
- 扩展方法的命名冲突:如果类型本身已经定义了一个与扩展方法同名的方法,实例方法优先。扩展方法只会在没有实例方法的情况下被调用。
this
关键字仅用于第一个参数
:扩展方法的第一个参数是要扩展的类型,必须用this
关键字修饰。扩展方法只能有一个 this 参数。- 命名空间的引用:要使用扩展方法,必须引用扩展方法所在的命名空间。
- 适用场景:扩展方法通常用于增强不可修改的类(如第三方库类)或基础类型(如 string、int 等)而不推荐滥用
1.5.2 操作示例
以下示例演示如何为 string 类型定义一个扩展方法 ToCapitalize,用于将字符串的首字母大写:
// 定义一个静态类来容纳扩展方法
public static class StringExtensions
{// 定义一个静态扩展方法,用于将字符串首字母大写public static string ToCapitalize(this string input){if (string.IsNullOrEmpty(input))return input;return char.ToUpper(input[0]) + input.Substring(1).ToLower();}
}// 使用扩展方法
public class Program
{public static void Main(){string text = "hello world";// 调用扩展方法,就像调用实例方法一样string capitalizedText = text.ToCapitalize();Console.WriteLine(capitalizedText); // 输出 "Hello world"}
}
为 int 类型添加一个扩展方法,计算该整数的平方:
public static class IntExtensions
{public static int Square(this int number){return number * number;}
}public class Program
{public static void Main(){int number = 5;int square = number.Square(); // 调用扩展方法Console.WriteLine(square); // 输出 25}
}
相关文章:
C#基础之方法
文章目录 1 方法1.1 定义方法1.2 参数传递1.2.1 按值传递参数1.2.2 按引用传递参数1.2.3 按输出传递参数1.2.4 可变参数 params1.2.5 具名参数1.2.6 可选参数 1.3 匿名方法1.3.1 Lambda 表达式1.3.1.1 定义1.3.1.2 常用类型1.3.1.3 Lambda 表达式与 LINQ1.3.1.4 Lambda 表达式的…...
JVM 性能调优 -- JVM常用调优工具【jps、jstack、jmap、jstats 命令】
前言: 前面我们分析怎么去预估系统资源,怎么去设置 JVM 参数以及怎么去看 GC 日志,本篇我们分享一些常用的 JVM 调优工具,我们在进行 JVM 调优的时候,通常需要借助一些工具来对系统的进行相关分析,从而确定…...
PostgreSQL 三种关库模式
PostgreSQL 三种关库模式 基础信息 OS版本:Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本:16.2 pg软件目录:/home/pg16/soft pg数据目录:/home/pg16/data 端口:5777PostgreSQL 提供了三种关库模式&…...
《运放秘籍》第二部:仪表放大器专项知识点总结
一、差分放大器与仪表放大器的讨论 1.1. 仪放的前世今生——差分放大器原理? 1.2. 差分放大的原理 1.3. 差分放大器检测电流 1.4. 差分放大器端一:输入阻抗 1.5. 差分放大器端二:共模抑制比 1.6. 为什么关注输入阻抗?共模抑…...
C++STL之vector(超详细)
CSTL之vector 1.vector基本介绍2.vector重要接口2.1.构造函数2.2.迭代器2.3.空间2.3.1.resize2.3.2.capacity 2.4.增删查找 3.迭代器失效4.迭代器分类 🌟🌟hello,各位读者大大们你们好呀🌟🌟 🚀Ὠ…...
ubuntu环境下安装electron环境,并快速打包
1.配置镜像源 关闭防火墙,命令:sudo ufw disable 1.1配置国内镜像源: vim /etc/apt/source.list deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiversedeb-src https://mirrors.aliyun.com/ubuntu/ jammy main…...
【Pytorch】优化器(Optimizer)模块‘torch.optim’
torch.optim 是 PyTorch 中提供的优化器(Optimizer)模块,用于优化神经网络模型的参数,更新网络权重,使得模型在训练过程中最小化损失函数。它提供了多种常见的优化算法,如 梯度下降法(SGD&#…...
API平台建设之路:从0到1的实践指南
在这个互联网蓬勃发展的时代,API已经成为连接各个系统、服务和应用的重要纽带。搭建一个优质的API平台不仅能为开发者提供便利,更能创造可观的商业价值。让我们一起探讨如何打造一个成功的API平台。 技术架构是API平台的根基。选择合适的技术栈对平台的…...
【Flink-scala】DataStream编程模型之窗口计算-触发器-驱逐器
DataStream API编程模型 1.【Flink-Scala】DataStream编程模型之数据源、数据转换、数据输出 2.【Flink-scala】DataStream编程模型之 窗口的划分-时间概念-窗口计算程序 文章目录 DataStream API编程模型前言1.触发器1.1 代码示例 2.驱逐器2.1 代码示例 总结 前言 本小节我想…...
信号灯集以及 P V 操作
一、信号灯集 1.1 信号灯集的概念 信号灯集是进程间同步的一种方式。 信号灯集创建后,在信号灯集内部会有很多个信号灯。 每个信号灯都可以理解为是一个信号量。 信号灯的编号是从0开始的。 比如A进程监视0号灯,B进程监视1号灯。 0号灯有资源&…...
在 Flutter app 中,通过视频 URL 下载视频到手机相册
在 Flutter app 中,通过视频 URL 下载视频到手机相册可以通过以下步骤实现: 1. 添加依赖 使用 dio 下载文件,结合 path_provider 获取临时存储路径,以及 gallery_saver 将文件保存到相册。 在 pubspec.yaml 中添加以下依赖&…...
Nature Methods | 人工智能在生物与医学研究中的应用
Nature Methods | 人工智能在生物与医学研究中的应用 生物研究中的深度学习 随着人工智能(AI)技术的迅速发展,尤其是深度学习和大规模预训练模型的出现,AI在生物学研究中的应用正在经历一场革命。从基因组学、单细胞组学到癌症生…...
Axure PR 9 随机函数 设计交互
大家好,我是大明同学。 这期内容,我们将深入探讨Axure中随机函数的用法。 随机函数 创建随机函数所需的元件 1.打开一个新的 RP 文件并在画布上打开 Page 1。 2.在元件库中拖出一个矩形元件。 3.选中矩形元件,样式窗格中,将…...
【人工智能基础05】决策树模型
文章目录 一. 基础内容1. 决策树基本原理1.1. 定义1.2. 表示成条件概率 2. 决策树的训练算法2.1. 划分选择的算法信息增益(ID3 算法)信息增益比(C4.5 算法)基尼指数(CART 算法)举例说明:计算各个…...
【人工智能基础03】机器学习(练习题)
文章目录 课本习题监督学习的例子过拟合和欠拟合常见损失函数,判断一个损失函数的好坏无监督分类:kmeans无监督分类,Kmeans 三分类问题变换距离函数选择不同的起始点 重点回顾1. 监督学习、半监督学习和无监督学习的定义2. 判断学习场景3. 监…...
HarmonyOS(60)性能优化之状态管理最佳实践
状态管理最佳实践 1、避免在循环中访问状态变量1.1 反例1.2 正例 2、避免不必要的状态变量的使用3、建议使用临时变量替换状态变量3.1 反例3.2 正例 4、参考资料 1、避免在循环中访问状态变量 在应用开发中,应避免在循环逻辑中频繁读取状态变量,而是应该…...
数据库课程设计报告 超市会员管理系统
一、系统简介 1.1设计背景 受到科学技术的推动,全球计算机的软硬件技术迅速发展,以计算机为基础支撑的信息化如今已成为现代企业的一个重要标志与衡量企业综合实力的重要标准,并且正在悄无声息的影响与改变着国内外广泛的中小型企业的运营模…...
C++算法练习-day54——39.组合总和
题目来源:. - 力扣(LeetCode) 题目思路分析 题目:给定一个整数数组 candidates 和一个目标数 target,找出所有独特的组合,这些组合中的数字之和等于 target。每个数字在每个组合中只能使用一次。 思路&a…...
计算机毕业设计PySpark+Hadoop中国城市交通分析与预测 Python交通预测 Python交通可视化 客流量预测 交通大数据 机器学习 深度学习
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
Linux的文件系统
这里写目录标题 一.文件系统的基本组成索引节点目录项文件数据的存储扇区三个存储区域 二.虚拟文件系统文件系统分类进程文件表读写过程 三.文件的存储连续空间存放方式缺点 非连续空间存放方式链表方式隐式链表缺点显示链接 索引数据库缺陷索引的方式优点:多级索引…...
【Vue3】从零开始创建一个VUE项目
【Vue3】从零开始创建一个VUE项目 手动创建VUE项目附录 package.json文件报错处理: Failed to get response from https://registry.npmjs.org/vue-cli-version-marker 相关链接: 【VUE3】【Naive UI】<NCard> 标签 【VUE3】【Naive UI】&…...
9)语法分析:半倒装和全倒装
在英语中,倒装是一种特殊的句子结构,其中主语和谓语(或助动词)的位置被颠倒。倒装分为部分倒装和全倒装两种类型,它们的主要区别在于倒装的程度和使用的场合。 1. 部分倒装 (Partial Inversion) 部分倒装是指将助动词…...
Scala关于成绩的常规操作
score.txt中的数据: 姓名,语文,数学,英语 张伟,87,92,88 李娜,90,85,95 王强,78,90,82 赵敏,92,8…...
使用Java实现度分秒坐标转十进制度的实践
目录 前言 一、度分秒的使用场景 1、表示方法 2、两者的转换方法 3、区别及使用场景 二、Java代码转换的实现 1、确定计算值的符号 2、数值的清洗 3、度分秒转换 4、转换实例 三、总结 前言 在地理信息系统(GIS)、导航、测绘等领域,…...
根据后台数据结构,构建搜索目录树
效果图: 数据源 const data [{"categoryidf": "761525000288210944","categoryids": "766314364226637824","menunamef": "经济运行","menunames": "经济运行总览","tempn…...
食品计算—FoodSAM: Any Food Segmentation
🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…...
2411rust,1.83
原文 1.83.0稳定版 新的常能力 此版本包括几个说明在常环境中运行代码可干的活的大型扩展.这是指编译器在编译时必须计算的所有代码:常和静项的初值,数组长度,枚举判定值,常模板参数及可从(constfn)此类环境调用的函数. 引用静.当前,除了静项的初化器式外,禁止常环境引用静…...
tomcat加载三方包顺序
共享库 tomcat支持多个webapp共享一个三方库,而不需要每个webapp都引入该三方库 tomcat加载类顺序 bootstrap:加载jvm提供的类system:加载$CATALINA_HOME/bin下的bootstrap.jar,commons-daemon.jar,tomcat-juli.jar三个包//加载$CLASSPATH…...
计算机的错误计算(一百七十一)
摘要 探讨 MATLAB 中秦九韶(Horner)多项式的错误计算。 例1. 用秦九韶(Horner)算法计算(一百零七)例1中多项式 直接贴图吧: 这样,MATLAB 给出的仍然是错误结果,因为准…...
js对于json的序列化、反序列化有哪几种方法
在JavaScript中,对JSON(JavaScript Object Notation)进行序列化(将对象转换为JSON字符串)和反序列化(将JSON字符串转换为对象)是常见的操作。以下是一些常用的方法: 序列化…...
百度wordpress插件下载地址/佛山外贸seo
最近,有关最新版本的南大核心目录的帖子应该又又又刷屏了。有关北大核心和南大核心目录的帖子,好像已经成了惯例,隔三差五就会被拿出来晾凉晒晒,收割一波阅读量。学术圈的人,对于核心期刊的关注,可能甚于关…...
做网站哪一家公司好/营销网站建设大概费用
在皕杰报表的函数中,数据集函数和单元格函数都有sum求和函数,但其用法是不同的。我们先看两个函数的说明: 一、数据集函数sum 函数说明:从数据集中,从满足条件的记录中,算出给定字段或表达式的总和 语法&a…...
网站ie浏览器不兼容/深圳seo顾问
今天无意中发现一个好玩的照片,可能有人玩過了 -v- 但真的蛮有意思的——————–先看看這張圖然後如果你有戴眼鏡拿掉再看一次如果你看到了二張不同的圖恭喜你 你真的近視了(這句話是對還沒戴眼鏡而近視的人說的)(一般人應該會先看到 愛因斯坦 近視或…...
番禺建设网站外包/东莞百度搜索网站排名
2019独角兽企业重金招聘Python工程师标准>>> 腰椎间盘突出我是L45号,左腿发麻有时疼痛,腰开始只是酸痛,因为是在外地打工怕家里担心,有胆小,周末百度了下就去了医院。还好当时着的是三家公立医院࿰…...
b2c电子商务是指什么/做好的网站怎么优化
7-21 求特殊方程的正整数解 (15分) 本题要求对任意给定的正整数N,求方程XYN的全部正整数解。 输入格式: 输入在一行中给出正整数N(≤10000)。 输出格式: 输出方程XYN的全部正整数解,其中X≤Y。每组解…...
ppt做多个网站/深圳做推广哪家比较好
这问题一般是在manifest.xml中没有配置相应的activity,或者配置的android:name 的路径不对,没写全。 可是今天我在manifest中已经配置正确了activity还有这错误。 原因在activity的构造方法 我的activity中的构造方法中写多了参数,导致跳转时…...