C# 语言类型全解

总目录
C# 语法总目录

C# 语言类型全解

  • C# 语言类型
  • 一.预定义类型
    • 1. 数值类型
      • 1.1数值类型字面量表示
      • 1.2 获取某个值的类型
      • 1.3 float 和 double 类型的特殊值
    • 2. 算术运算
    • checked 和 unchecked 运算符
    • 3. 位运算符
    • 4. 比较运算和条件运算
  • 二.字符串和字符类型简述
    • (1) 字符类型基本用法
    • (2) 字符串类型基本用法
      • @符号
      • $ 符号
      • $ 和 @ 结合使用
    • 连接字符串
  • 三、数组
    • 1. 数组创建
    • 2. 多维数组
      • 2.1 矩形数组
      • 2.2 锯齿形数组
  • 四、枚举类型和结构体
    • 1. 枚举类型使用
    • 2. 结构体的使用
  • 五、传递参数及参数修饰符
    • 1. 按值传递参数
    • 2. ref 修饰符
      • ref引用局部变量
      • ref 引用返回值
    • 3. out 修饰符
    • 4. params 修饰符
    • 5. 可选参数
    • 6. 命名参数
    • 7.隐式类型变量var
  • 六、类型默认值
  • 七、null 运算符 ?
    • 1. null 合并运算符
    • 2. null条件运算符
  • 八、语句特性
    • 1. 带模式的 switch 语句(C#7)
    • 2. switch 语句 case使用条件 when
    • 3. 跳转语句
      • (1) goto语句使用
      • (2) break 语句
      • (3)continue 语句
      • (4) throw 语句
    • 4. using 语句

C# 语言类型

注释

//单行注释/// <summary>
/// 方法注释
/// </summary>
/// <param name="args">方法参数</param>/*
多行注释
*/

一.预定义类型

预定义类型又称框架类型,它们都在 System 命名空间下。

预定义类型又可以细分为 值类型 ,和 引用类型

(1) 值类型

值类型包含 所有的数值类型char类型bool类型自定义的 struct 类型enum 类型

(2) 引用类型

引用类型包含 所有的类数组委托接口类型 以及 预定义类型中的 string类型

值类型:

  • 数值
    • 有符号整数(sbyte,short,int,long)
    • 无符号整数(byte,ushort,uint,ulong)
    • 实数(float,double,decimal)
  • 逻辑值(bool)
  • 字符(char)

引用类型:

  • 字符串(string)
  • 对象(object)

值类型大小

namespace TopSet06
{internal class Program{static void Main(string[] args){Console.WriteLine("-------字节型-------");Console.WriteLine("有符号 sbyte is: "+ sizeof(sbyte));Console.WriteLine("无符号 byte is: " + sizeof(byte));Console.WriteLine("-------短整型-------");Console.WriteLine("有符号 short is: " + sizeof(short));Console.WriteLine("无符号 ushort is: " + sizeof(ushort));Console.WriteLine("-------整型-------");Console.WriteLine("有符号int is: " + sizeof(int));Console.WriteLine("无符号uint is: " + sizeof(uint));Console.WriteLine("-------长整型-------");Console.WriteLine("long is: " + sizeof(long));Console.WriteLine("ulong is: " + sizeof(ulong));Console.WriteLine("-------浮点型-------");Console.WriteLine("float is: " + sizeof(float));Console.WriteLine("double is: " + sizeof(double));Console.WriteLine("-------十进制小数-------");Console.WriteLine("decimal is: " + sizeof(decimal));Console.WriteLine("-------布尔型-------");Console.WriteLine("bool is: " + sizeof(bool));Console.WriteLine("-------字符型-------");Console.WriteLine("char is: " + sizeof(char));Console.ReadLine();}}
}
--输出
-------字节型-------
有符号 sbyte is: 1
无符号 byte is: 1
-------短整型-------
有符号 short is: 2
无符号 ushort is: 2
-------整型-------
有符号int is: 4
无符号uint is: 4
-------长整型-------
long is: 8
ulong is: 8
-------浮点型-------
float is: 4
double is: 8
-------十进制小数-------
decimal is: 16
-------布尔型-------
bool is: 1
-------字符型-------
char is: 2

1. 数值类型

1.1数值类型字面量表示

数值类型字面量有一些表示特性,简化程序员工作

namespace TopSet07
{internal class Program{static void Main(string[] args){int a = 0x560;//需要C#7.0以上int b = 0b00101010;//需要C#7.0以上,并且vs版本需要2022 17.9以上int c = 1_000_000_1_20;double d = 1e10;double D = 1E10;double e = 1.5;//float 类型需要添加末尾的f 或 F 大小写都行float f = 1.5f;//float 类型需要添加末尾的m 或 M 大小写都行decimal g = 3.1415m;Console.WriteLine(a);Console.WriteLine(b);Console.WriteLine(c);Console.WriteLine(d);Console.WriteLine(D);Console.WriteLine(e);Console.WriteLine(f);Console.WriteLine(g);Console.ReadLine();}}
}--输出
1376
42
1000000120
10000000000
10000000000
1.5
1.5
3.1415

1.2 获取某个值的类型

namespace TopSet08
{internal class Program{static void Main(string[] args){Console.WriteLine(10.0.GetType());int a = 12;Console.WriteLine(a.GetType());Console.ReadLine();}}
}
--输出
System.Double
System.Int32

1.3 float 和 double 类型的特殊值

Console.WriteLine("------float------");
Console.WriteLine(float.PositiveInfinity);
Console.WriteLine(float.NegativeInfinity);
Console.WriteLine(float.Epsilon);
Console.WriteLine(float.MaxValue);
Console.WriteLine(float.MinValue);
Console.WriteLine(float.NaN);
Console.WriteLine("------double------");
Console.WriteLine(double.PositiveInfinity);
Console.WriteLine(double.NegativeInfinity);
Console.WriteLine(double.Epsilon);
Console.WriteLine(double.MaxValue);
Console.WriteLine(double.MinValue);
Console.WriteLine(double.NaN);
//NaN不等于任何数,包括NaN
//要判断是不是NaN ,只能用方法 IsNaN 来判断
Console.WriteLine("------IsNaN------");
Console.WriteLine(float.NaN == double.NaN);     //false
Console.WriteLine(float.IsNaN(float.NaN));      //trueConsole.ReadLine();
--输出
------float-------1E-45
3.4028235E+38
-3.4028235E+38
NaN
------double-------5E-324
1.7976931348623157E+308
-1.7976931348623157E+308
NaN
------IsNaN------
False
True

2. 算术运算

加减乘除取余

自加自减,案例略。

checked 和 unchecked 运算符

**checked **

checked 运算符可以检查算术是否溢出,在checked中溢出会报错。

浮点类型的无法使用该检查,因为浮点溢出会变为无穷值。

int a = 1_000_000;
int c = checked(a * a);
--输出报错
Unhandled exception. System.OverflowException: Arithmetic operation resulted in an overflow.at

unchecked

不管里面是否溢出都不管,溢出了也不报错

int a = 1_000_000;
int b = unchecked( a*a);
Console.WriteLine(b);
--输出
-727379968

3. 位运算符

左移<< , 右移 >> , 异或 ^ , 按位或 | , 按位与 & , 按位取反 ~

4. 比较运算和条件运算

比较运算:>= , <= ,== , != , > , <

条件运算: ||,&& , w? a:b

二.字符串和字符类型简述

(1) 字符类型基本用法

字符类型表示一个Unicode字符或者一个转义字符,占用两个字节,字符类型可以直接转换成short类型,转成其他类型需要显示转换。

char a = 'A';
char a = '\n'; 

(2) 字符串类型基本用法

字符串类型是引用类型,但是却遵循 == 运算时是进行值的比较,字符串类型无法使用 > < ,只能使用CompareTo方法

string a = "hello";
string b = "nihao";
string c = "hello";
int v = a.CompareTo(b);
Console.WriteLine(a==c);
Console.WriteLine(v);
Console.ReadLine();
--输出
True
-1

@符号

string类型中,可以使用@表示内部不支持转义字符,所有的字符就是字符,没有别的意思。

注意 @符号因为还需要左右"" 两个引号把字符串框起来,所以在它们内部如果想输出双引号,那么需要两个双引号来表示一个双引号

string a = "\n\n";	//输出两个换行
string b = @"\n\n";	//输出字符 \n\n
//两个双引号
string c = @"{name=""xiaoli""}"	//输出 {name="xiaoli"}

$ 符号

字符串插值,C#6.0版本以上才有,使用插值的使用,还可以使用冒号进行插值的格式化,略。

int a = 10;
string b = $"num is {a}";
Console.WriteLine(b);--输出
num is 10

$ 和 @ 结合使用

结合使用可以让插值字符串换行,但是必须 $ 在 @ 前面

int a = 10;
string b = $@"num is {
a}, hhhhhh";
Console.WriteLine(b);
--输出
num is 10, hhhhhh

连接字符串

直接使用 + 加号可以直接连接字符串,但是,更好的解决方案是StringBuilder类型,如果需要频繁大量的连接字符串,那么请使用StringBuilder

string a = "abc"+"d";StringBuilder sb = new StringBuilder();
sb.Append("aa");
Console.WriteLine(sb.ToString());	//输出  aa

三、数组

1. 数组创建

//第一种 数组的初始化方式
//int[] scores = {23,43,432,42,34,234,234,2,34} ;//使用这种方式赋值的时候,一定要注意 在数组声明的时候赋值//第二种数组创建的方式
//int[] scores = new int[10];
//int[] scores;
//scores = new int[10];//int[] scores = new int[10]{3,43,43,242,342,4,234,34,234,5};
//Console.WriteLine(scores[10]);//当我们访问一个索引不存在的值的时候,会出现异常exception//char[] charArray = new char[2]{'a','b'};
//Console.WriteLine(charArray[1]);string[] names = new string[]{"taikr","baidu","google","apple"};
Console.WriteLine(names[0]);
Console.ReadKey();

2. 多维数组

多维数组分为锯齿形数组矩形数组

2.1 矩形数组

//矩形数组
//1.
int[,] retrict = new int[3, 3]
{{1,2,3},{2,3,4},{2,3,4}
};//2.
int[,] rer =
{{1,2,6},{2,3,4},{2,3,4}
};

2.2 锯齿形数组

//锯齿形数组
//1.
int[][] res = new int[3][];
res[0] = new int[] { 4, 5 };
res[1] = new int[] { 4, 5 };
res[2] = new int[] { 4, 5 };//2.
int[][] tes = new int[][]
{new int[]{4,5},new int[]{1},new int[]{7,8,9}
};//3.
int[][] ret =
{new int[] { 4, 5 },new int[] { 4, 5 },
};

四、枚举类型和结构体

1. 枚举类型使用

namespace _037_枚举类型 {//枚举类型的定义enum GameState:byte//修改该枚举类型的存储类型,默认为int{Pause = 100, // 默认代表的是整数0Failed = 101,// 默认代表的是整数1Success=102,// 默认代表的是整数2Start=200// 默认代表的是整数3}class Program{static void Main(string[] args) {利用定义好的枚举类型 去声明变量//GameState state = GameState.Start;//if (state == GameState.Start)//枚举类型比较//{//    Console.WriteLine("当前处于游戏开始状态");//}//Console.WriteLine(state);//int state =3;//if (state == 3)//{//    Console.WriteLine("当前处于游戏开始界面");//}GameState state = GameState.Start;int num = (int)state;Console.WriteLine(num);Console.ReadKey();}}
}

2. 结构体的使用

namespace _038_结构体 {//我们可以把结构体当成,几个类型组成了一个新的类型//比如下面的这个就是使用了3个float类型的变量,来表示一个坐标类型struct Position{public float x;public float y;public float z;}enum Direction{West,North,East,South}struct Path{public float distance;public Direction dir;}class Program {static void Main(string[] args){//通过三个float类型的变量来表示一个敌人的坐标//float enemy1X = 34;//float enemy1Y = 1;//float enemy1Z = 34;//float enemy2X = 34;//float enemy2Y = 1;//float enemy2Z = 34;//当使用结构体声明变量的时候,相当于使用结构体中所有的变量去声明//Position enemy1Position;//enemy1Position.x = 34;//可以通过.加上属性名来访问结构体中指定的变量使用结构体让程序变得更清晰//Position enemy2Position;Path path1;path1.dir = Direction.East;path1.distance = 1000;}}
}

五、传递参数及参数修饰符

1. 按值传递参数

C#方法中的参数默认是按照值传递

2. ref 修饰符

ref 修饰符 用于将 数值类型参数 进行引用传递

namespace _036_ref 修饰符 {class Program {static void Func(ref int a,ref int b){int temp = a;a = b;b = temp;}static void Main(string[] args){int a = 10;int b = 20;Func(ref a, ref b);Console.WriteLine(a.ToString());	//20Console.WriteLine(b.ToString());	//10}}
}namespace _036_ref 修饰符 {class Program {static void Func(ref string a,ref string b){string temp = a;a = b;b = temp;}static void Main(string[] args){string a = "hello";string b = "nihao";Func(ref a,ref b);Console.WriteLine(a.ToString());	//nihaoConsole.WriteLine(b.ToString());	//hello}}
}

ref引用局部变量

需要C#7

int[] a = { 1, 2, 3 };
ref int b = ref a[1];
Console.WriteLine(a[1]);
b = 5;
Console.WriteLine(a[1]);
//输出
2
5

ref 引用返回值

需要C#7

static string a = "abc";
static ref string Method()
{return ref a;
}
static void Main(string[] args)
{ref string c = ref Method();Console.WriteLine(a);c = "hhh";Console.WriteLine(a);
}
//输出
abc
hhh

3. out 修饰符

out 修饰符是传出参数,用于将方法内的数值用参数的形式传出,此外,带 out 修饰的参数,在方法结束前必须对它进行赋值。

namespace _036_out 修饰符 {class Program {static void Func(string a,out string b,out int c){b = a;c = 1;}static void Main(string[] args){string a = "hello";string b = "nihao";//如果不想要传出参数,那么就用下划线  _  代替Func(a,out b,out _);Console.WriteLine(a.ToString());	//helloConsole.WriteLine(b.ToString());	//hello}}
}

如果不想要其他的out参数,那么在调用方法的时候 用下划线 _ 代替,这叫做丢弃变量

//声明 
static void Func(string a,out string b,out int c)//调用    
Func(a,out b,out _);

4. params 修饰符

params 修饰的参数必须是一维数组,这个参数必须是最后一个参数

namespace _036_params 修饰符 {class Program {static void Func(string a,params int[] c){int sum = 0;foreach(var i in c){sum += i;}Console.WriteLine(sum.ToString());}static void Main(string[] args){Func("",1,2,3);			//6}}
}

5. 可选参数

可选参数就是给方法中 的形参添加一个默认值

 void Func(string a = "fast",int[] c)

6. 命名参数

命名参数就是不管函数声明中参数的顺序,在调用过程中指定给哪个形参赋值。

此外命名参数还可以和值传递的混合使用,但是命名参数必须放在末尾。

还有可选参数和命名参数可以混合使用。

namespace _036_命名参数 {class Program {static void Func(int a,int b){Console.WriteLine(a);Console.WriteLine(b);}static void Main(string[] args){int c = 1;int d = 2;Func(b:d, a:c);}}
}

7.隐式类型变量var

var a = "abc";
//等同于
string a = "abc";
//没有任何区别

六、类型默认值

所有类型的实例都有默认值。

char类型默认值 是 ‘\0’

bool类型默认值 是 false

所有数字类型默认值 是 0

所有引用类型默认值 是 null

static int a;
static bool b;
static char c;
static string d;
static void Main(string[] args)
{Console.WriteLine(a);Console.WriteLine(b);Console.WriteLine(c);Console.WriteLine(d);
}
//输出
0
False

七、null 运算符 ?

C#提供了两个null处理运算符: null合并运算符null条件运算符

1. null 合并运算符

null合并运算符写作 ?? 。意思是 “如果操作数不是null,则结果是操作数,否则结果是一个默认的值”。

namespace _036_显示转换和隐式转换 {class Program {static void Main(string[] args){string ss = null;//ss = "ts";string res = ss ?? "nothing";Console.WriteLine(res);		//nothing}}
}

2. null条件运算符

null条件运算符写作 ?. 意思是如果左值为null,则为null,否则为该值内的成员。

例如 :

namespace _036_显示转换和隐式转换 {class Program {static void Main(string[] args){string ss = null;//ss = "NIHAO";				//输出nihao	ss = ss?.ToLower();Console.WriteLine(ss);		//输出空行}}
}

注意: null 两种运算符的混合使用如下

StringBuilder? sb = null;
string a = sb?.ToString() ?? "sb is null";
Console.WriteLine(a);
//输出
sb is null

八、语句特性

1. 带模式的 switch 语句(C#7)

object可以是任何类型的变量

static void TellMeTheType(object x)
{switch (x){//这里的 i 称作模式变量case int i:Console.WriteLine("It's an int");Console.WriteLine($" {i} square is {i*i}");break;case double i:Console.WriteLine("It's an double");Console.WriteLine($" {i} square is {i * i}");break;case string i:Console.WriteLine("It's an string");Console.WriteLine("string is " + i);break;default:break;}
}static void Main(string[] args)
{TellMeTheType(12);TellMeTheType("hello");TellMeTheType(12.5);
}
//It's an int
//12 square is 144
//It's an string
//string is hello
//It's an double
//12.5 square is 156.25

2. switch 语句 case使用条件 when

类似if判断

switch(x)
{case float f when f>100:case double d when d>100:case decimal m when m>100:Console.WriteLine("We can refer to x here but not f or d or m");break;case null:Console.WriteLine("Nothing here");break;
}

3. 跳转语句

C#中的跳转语句有 break , continue,goto,return和throw

(1) goto语句使用

int myInteger = 5;
goto mylabel;//goto语句用来控制程序跳转到某个标签的位置
myInteger++;
mylabel:Console.WriteLine(myInteger);
Console.ReadKey();

如果在try语句里面执行goto,那么在goto之前会执行finally块内语句。

goto语句无法从finally块中跳到块外,除非用throw

(2) break 语句

退出当前最近一层的 for 循环

(3)continue 语句

跳过当前最近一层的 for 循环

(4) throw 语句

抛出异常

4. using 语句

这里的 using 语句和using指令用于命名空间不一样,这里的using语句主要作用是关闭一个持续流,例如自动关闭一个打开的文件,主要利用的是 调用 Dispose方法

{//这样写,可以省略 a.close()方法using var a = File.Open(@"D:\\a.txt", FileMode.Open);
}//等同于
{var a = File.Open(@"D:\\a.txt", FileMode.Open);try{Console.ReadLine();}finally{//释放资源a.Dispose();}
}

总目录
C# 语法总目录

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

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

相关文章

如何确定MySQL中哪些列适合做索引

1、查询频率 频繁出现在WHERE子句、JOIN条件、ORDER BY子句或GROUP BY子句中的列是创建索引的候选列。 2、数据唯一性 具有唯一性约束的列&#xff08;如主键、唯一索引&#xff09;是创建索引的理想选择&#xff0c;因为它们可以确保查询的快速返回。 如果列中的值大部分都…

一个易于使用、与Android系统良好整合的多合一游戏模拟器

大家好&#xff0c;今天给大家分享的是一个易于使用、与Android系统良好整合的多合一游戏模拟器 Lemuroid。 Lemuroid 是一个专为Android平台设计的开源游戏模拟器项目&#xff0c;它基于强大的Libretro框架&#xff0c;旨在提供广泛的兼容性和卓越的用户体验。 项目介绍 Lem…

如何安装多版本CUDA?

首先聊一个题外话&#xff1a;前几天在csdn上看到的一个话题”安装pytorch一定要去nvidia官网下载安装cuda和cudnn吗&#xff1f;“ 我相信任何一个刚开始接触或者从事深度学习的炼丹者都会从安装cuda开始&#xff0c;现在网上随便一搜如何安装pytorch&#xff0c;蹦出来教程提…

pd虚拟机 Parallels Desktop 19 for Mac 破解版小白安装使用指南

Parallels Desktop 19 for Mac 乃是一款适配于 Mac 的虚拟化软件。它能让您在 Mac 计算机上同时运行多个操作系统。您可借此创建虚拟机&#xff0c;并于其中装设不同的操作系统&#xff0c;如 Windows、Linux 或 macOS。使用 Parallels Desktop 19 mac 版时&#xff0c;您可在 …

无线麦克风推荐哪些品牌,一文揭秘无线麦克风领夹哪个牌子好!

​究竟该如何选择麦克风呢&#xff1f;又该如何挑选无线麦克呢&#xff1f;询问我关于麦克风选择问题的人着实不少。对于那些仅仅是想要简单地自我娱乐的朋友而言&#xff0c;着实没必要去折腾&#xff0c;直接使用手机自带的麦克风便可以了。 但若是处于想要直播、拍摄短视频…

redis初步认识(一)

文章目录 概述安装编译 string数据结构基础命令应用对象存储累加器 list结构基础命令应用栈(先进后出FILO)队列 HASH基础命令存储结构应用存储对象 小结 概述 redis 是一个远程字典服务&#xff1b;当然&#xff0c;redis是内存数据库&#xff0c;kv数据库&#xff0c;最基础的…

【Termius】详细说明MacOS中的SSH的客户端利器Termius

希望文章能给到你启发和灵感~ 如果觉得有帮助的话,点赞+关注+收藏支持一下博主哦~ 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境二、软件的安装2.1 Termius界面介绍2.1.1 Hosts 主机列表2.1.2 SFTP 文件传输2.1.3 Port ForWarding 端口转发2.1.4 Snippets 片…

为什么带货主播,他突然就不吃香了?

为什么带货主播他突然就不吃香了&#xff1f;工资骤降50%。 相比 2023 年初主播的平均薪资降了50%&#xff0c;那不管你是头部主播还是腰部主播&#xff0c;全部都降薪了。那尾部主播就更不用说了&#xff0c;有的主播他的时薪已经低到 20 块钱一个小时&#xff0c;还不如大学…

U-boot相关基础知识

U-boot和Bootloader之间的关系 U-Boot是Bootloader的一种实现&#xff0c;它专门用于嵌入式系统&#xff0c;特别是那些基于ARM、MIPS等处理器的系统。U-Boot提供了丰富的硬件支持和功能&#xff0c;使得开发者能够轻松地初始化硬件、加载操作系统内核&#xff0c;并进行一些基…

【漏洞复现】安美数字酒店宽带运营系统——命令执行漏洞(CNVD-2021-37784)

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 安美数字酒店宽带运营系统 server_ping.php 存在远程命令执行漏洞&#…

一文带你了解什么是【点击劫持】

点击劫持&#xff0c;意思就是你点击网页的时候&#xff0c;有人劫持你&#xff0c;对没错&#xff0c;劫持你的信息&#xff0c;甚至劫持你的马内&#xff0c;劫持你的理想&#xff0c;劫持你的肉体&#xff0c;劫持你的灵魂。就是这么可怕。 目录 1 如何实现假网站 1.1 if…

“未来独角兽” | 安全狗入选福建省数字经济核心产业创新企业名单

近日&#xff0c;福建省数据管理局公布了入选2024年度全省数字经济核心产业创新企业名单。 作为国内云原生安全领导厂商&#xff0c;安全狗凭借自身在云安全领域的卓越表现和创新实力入选&#xff0c;获得“未来独角兽”称号。 据悉&#xff0c;此次对“未来独角兽”的评选条件…

【Linux】grep详解

grep 是一个非常强大的工具&#xff0c;可以用于快速搜索和过滤文本数据。 一.基本语法 grep [options] pattern [files]options&#xff1a;可选的命令行选项。 pattern&#xff1a;要搜索的文本模式&#xff0c;可以是普通文本或正则表达式。 files&#xff1a;要搜索的文件…

计算机视觉(CV)技术:优势、挑战与前景

摘要 计算机视觉作为人工智能的关键领域之一&#xff0c;正迅速改变我们的生活和工作方式。本文将探讨CV技术的主要优势、面临的挑战以及未来的发展方向。 关键词 计算机视觉, 人工智能, 数据处理, 自动化, 伦理问题 目录 引言计算机视觉技术的优势计算机视觉技术的挑战实…

内网穿透小工具

内网穿透小工具 前言 当在本地或者虚拟机&#xff0c;内网搭建了项目&#xff0c;数据库。可是在外网无法访问。下面的两款小工具可以暂时实现内网穿透能力。&#xff08;不支持自定义域名&#xff0c;但是不限制隧道数量&#xff01;且免费&#xff01;免费&#xff01;免费…

【杂记-浅谈NDP邻居发现协议】

NDP邻居发现协议 一、NDP协议概述二、NDP协议的作用三、NDP协议的工作原理四、NDP协议的报文类型 一、NDP协议概述 1、NDP&#xff0c;Neighbor Discovery Protocol&#xff0c;即邻居发现协议&#xff0c;是IPv6协议体系中的一个基础协议&#xff0c;它通过使用ICMPv6报文实现…

电商返利平台的用户行为分析

电商返利平台的用户行为分析 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在电商返利平台的运营中&#xff0c;理解和分析用户行为至关重要。通过技术手段对…

云主机相比物理机有哪些优势

随着信息技术的飞速发展&#xff0c;云计算技术逐渐成为现代企业的核心驱动力。其中&#xff0c;云主机作为云计算的重要组成部分&#xff0c;以其高性能、高可用性和灵活便捷的特性&#xff0c;成为企业IT架构的新选择。今天我们就来了解探讨云主机相比传统主机&#xff0c;有…

#### 广告投放 ####

以巨量引擎为例&#xff1a; 计费模式 eCPM&#xff08;expected Cost Per Mile&#xff0c;估计千次展示收入&#xff09; 概括&#xff1a; ecpm为千次展示的预估收益&#xff0c;是广告平台用来给广告排序的指标。 注意是展示而不是千次点击收益&#xff0c;展示了可能不…

星际编码:Swifter.Json,.NET宇宙中的数据处理新星

概述 在数字化的星辰大海中&#xff0c;数据是宇宙的通用语言。在.NET这一广袤的星系中&#xff0c;JSON作为信息交换的媒介&#xff0c;扮演着至关重要的角色。今天&#xff0c;我们要探索的是一颗新星——Swifter.Json&#xff0c;一个功能全面且性能卓越的JSON序列化和反序列…