Synchronization of old projects

Part1
This commit is contained in:
2025-09-30 16:46:01 +08:00
parent 116b65164b
commit 4e1548abe2
167 changed files with 8668 additions and 43 deletions
@@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
+144
View File
@@ -0,0 +1,144 @@
using System;
namespace Lesson
{
class Program
{
#region ref和out的原因
//他们可以解决 在函数内部改变外部传入的内容 里面变了 外面也要变
#endregion
#region ref和out的使用
//函数参数的修饰符
//当传入的值类型参数在内部修改 或引用类型参数在内部重新声明时
//外部的值会发生变化
#endregion
#region ref和out的区别
//1.ref传入的变量必须在外部初始化,out不用
//2.out传入的变量必须在内部赋值,ref不用
//1
//int a;
//ChangeValueRef(ref a);//报错
//ChangeValueOut(out a);//不报错
//2
// static void ChangeValueOut(out int value)
// {
// value = 99;//不赋值报错
// }
#endregion
//ref(在函数类型参数前用ref修饰
static void ChangeValueRef(ref int value)
{
value = 99;
}
static void ChangeArrayRef(ref int[] arr)
{
arr = new int[] { 99, 99, 99 };
}
//out(在函数类型参数前用out修饰
static void ChangeValueOut(out int value)
{
value = 99;
}
static void ChangeArrayOut(out int[] arr)
{
arr = new int[] { 99, 99, 99 };
}
static void ChangeValue(int value)
{
value = 99;
}
static void ChangeArrayValue(int[] arr)
{
arr[0] = 99;//将arr2的地址传给arr,两个地址指向的地址都一样,再将地址上的值从1改为99
}
static void ChangeArrayValue2(int[] arr)
{
arr = new int[] { 99 };//将arr2的地址传给arr,两个地址指向的地址都一样,
//在新开一个arr数组,但此时arr和arr2的联系断了,
//arr新开了一个地址来存放99,arr2还是1
}
static void Main(string[] args)
{
Console.WriteLine("尝试直接使用函数修改a的值到99:");
//试图使用函数修改a的值
int a = 1;
ChangeValue(a);
Console.WriteLine(a);//外部值不变
//在值类型和引用类型中有讲到,这是值类型,新开内存,拷贝值
Console.WriteLine("尝试直接使用函数修改arr2[0]的值到99");
int[] arr2 = { 1, 2, 3 };//复原
ChangeArrayValue(arr2);
Console.WriteLine(arr2[0]);//内外同值99
//在值类型和引用类型中有讲到,这是引用类型,不新开,直接拷贝地址,arr2和函数的arr指向同一地址
Console.WriteLine("尝试直接使用函数修改arr2[0]的值到99:(但在函数中new了一个数组)");
arr2 = new int[] { 1, 2, 3 };//复原
ChangeArrayValue2(arr2);
Console.WriteLine(arr2[0]);//外部值不变
//引用类型,但是在函数内新开了内存,arr2和arr指向的不是同一地址,只修改了函数内部arr[0]的值
//如果在函数中new了一个数组,那么怎么保持内外部统一一个值呢
//ref和out就是来解决这个问题的
//用ref来改变值类型的值
Console.WriteLine("使用ref函数修改a的值到99");
a = 1;//复原
ChangeValueRef(ref a);//需要在传入参数时也加上ref修饰符
Console.WriteLine(a);//内外同值99
//用ref来改变引用类型的值
arr2 = new int[] { 1,2,3 };//复原
Console.WriteLine("使用ref函数修改arr2[]的值到99(在函数中new了一个数组)");
ChangeArrayRef(ref arr2);
Console.WriteLine(arr2[0]);//内外同值99
//用out来改变值类型的值
Console.WriteLine("使用out函数修改a的值到99");
a = 1;//复原
ChangeValueOut(out a);
Console.WriteLine(a);
//用out来改变引用类型的值
Console.WriteLine("使用out函数修改arr2[]的值到99(在函数中new了一个数组)");
arr2 = new int[] { 1, 2, 3};
ChangeArrayOut(out arr2);
Console.WriteLine(arr2[0]);
}
}
}