目录
引用类型“改变后面被赋值的变量,也会改变原来的变量”数组默认为引用类型... 16
前言
首先感谢IT萌叔Jack的C#教学视频
我学习了大概一两周,写的这些笔记开始是在word上记录的,这篇大概1万字的笔记都是我学习IT萌叔Jack之后的总结,集合部分是看的up主唐老狮的视频,这篇笔记从数据类型到面向对象再到线程,事件,泛型。。。。等等都有写,但是还有反射和mysql没写完,后期用到的时候会补上的也有很多不足的地方希望大家在评论区打出来,我后期会更改。
我又更新了csdn太卡了,字一多就卡的不行,不过好在还是更新了一下,我重新大略的看了一遍,发现还是就看到委托以前就好了,用uinity的话它自带的有委托和事件。
输入输出
//输出语句:换行输出
Console.WriteLine("hool,word");
Console.WriteLine("hool c#");
//输出语句,无换行输出
Console.Write("hool word");
Console.Write("hool c#");
//输入语句:读取一行数据
string name = Console.ReadLine();
Console.WriteLine(name);
//输入语句:获取一个字符
ConsoleKeyInfo info = Console.ReadKey();
Console.WriteLine(info.KeyChar);
//不使用换行输出hell world
Console.Write("hello \n word");
Console.ReadKey();//输入任意键结束
字符串转换为其他变量
1.使用int.Parse()方法将字符串转换为整数类型,例如:int num = int.Parse("123");
string numstring = "123";
int num = int.Parse(str);
2.使用int.TryParse()方法进行安全的转换,如果转换失败会返回false,例如:
string str = "123";
bool success = int.TryParse(str,out int num);//num返回的是转换后的值
Debug.Log(success);
Debug.Log(num);
//输出
// true
// 123
使用to string方法将其他类型变为字符串类型
int num = 123;
string str1 = num.ToString();
bool b = true;
string str2 = b.ToString();
object obj = 3.14;
string str3 = Conver.ToString(obj);
函数
1静态函数 使用static关键字的函数
- 静态函数可以直接通过类名调用,不需要创建类的实例。例如:ClassName.StaticFunction()。
- 静态函数只能访问静态成员,不能访问非静态成员。这是因为静态函数在类加载时就已经存在,而非静态成员需要通过类的实例才能访问。
- 静态函数不能使用this关键字,因为this表示当前对象实例,而静态函数没有对象实例。
- 静态函数可以访问静态变量和静态方法,静态变量和静态方法在类加载时就已经存在。
- 静态函数可以被继承和重写。子类可以通过override关键字重写父类的静态函数,但是不能通过base关键字调用父类的静态函数。
- 静态函数可以在非静态函数中调用,但是非静态函数不能直接调用静态函数,需要通过类名调用。
- 静态函数常用于工具类、辅助函数等不需要依赖对象实例的场景。
2非静态函数 没有static关键字的函数
3语法:
访问修饰符 【静态修饰符】 返回值类型 函数名(参数列表)
{
函数体
【return返回值】;#返回函数要和返回值类型相同
}
Public static void【返回类型】 name(string[]【类型】 args【名字】)
{
Return(返回值)
}
Void 无返回值
函数名 首字母大写
修饰符
1.访问修饰符(Access Modifiers):这些修饰符控制类成员的可见性和访问级别。
public: | 成员可以在任何地方访问,没有访问限制 |
private | 仅在其声明的类中可以访问成员。 |
protected | 允许在声明它的类以及该类的派生类中访问成员。(密封) |
internal | 成员只能在同一程序集的其他类和代码中访问。(接口) |
修饰符
static修饰符 | 使成员成为类级别的,而不是实例级别的。static成员属于类,而不是类的任何特定实例,因此可以在不创建类实例的情况下访问它们。 |
const修饰符 | 使变量成为编译时常量,其值在编译时确定且无法更改。 |
readonly修饰符 | 使字段在其声明或构造函数中仅可赋值一次,然后保持不变。 |
virtual修饰符 | 允许在派生类中重写方法或属性。 |
override修饰符 | 在派生类中用于重写基类中的virtual或abstract成员。 |
静态函数
1静态函数 使用static关键字的函数
静态函数属于类本身,而不是类的实例。因此,它们可以直接通过类名调用,而不需要创建类的实例。例如:ClassName.StaticMethod();
静态函数不能访问类的非静态成员(如实例变量或实例方法),因为它们不依赖于类的实例。静态函数只能访问静态成员。
2非静态函数 没有static关键字的函数
非静态函数属于类的实例,需要创建类的实例来调用。例如:
using System;
//定义一个名为Person的类
public class Person
{
// 类的非静态属性
public string Name{get;set;}
//类的非静态方法
public void SayHello()
{
Console.WriteLine($"Hello,my name is {Name}.")
}
}
//定义一个名为Porgram的类
public class Porgram
{
public static void Main()
{
//创建Person类的实例,并为Name属性赋值
Person person = new Person
{
Name"Alice"
};
}
//调用实例方法SayHello
person.SayHell();//输出Hello,my name is Alice
}
public string Name { get; set; }的含义是:定义一个名为Name的公共属性,其数据类型为string。这个属性可以在类的实例中读取(通过get访问器)和写入(通过set访问器)
非静态函数可以访问类的实例成员(如实例变量)和静态成员
3语法:
访问修饰符 【静态修饰符】 返回值类型 函数名(参数列表)
{
函数体
【return返回值】;#返回函数要和返回值类型相同
}
Public static void name(string[]【类型】 args【名字】)
{
return
}
Void 无返回值
函数名 首字母大写
数据类型
b:bit比特(最小单位)位
B : = 8b, Byte(字节)简称B 0000 0000
1024B=1kB ,1024kB=1MB , 1024MB=1tB
1. 有符号整数类型:
- sbyte(有符号的8位整数):占用1个字节,范围为-128到127。
- short(有符号的16位整数):占用2个字节,范围为-32,768到32,767。
- int(有符号的32位整数):占用4个字节,范围为-2,147,483,648到2,147,483,647。
- long(有符号的64位整数):占用8个字节,范围为-9,223,372,036,854,775,808到9,223,372,036,854,775,807。
2. 无符号整数类型:
- byte(无符号的8位整数):占用1个字节,范围为0到255。
- ushort(无符号的16位整数):占用2个字节,范围为0到65,535。
- uint(无符号的32位整数):占用4个字节,范围为0到4,294,967,295。
- ulong(无符号的64位整数):占用8个字节,范围为0到18,446,744,073,709,551,615。
3. 浮点型数据类型:
- float(单精度浮点数):占用4个字节,精度约为6~7位有效数字。
- double(双精度浮点数):占用8个字节,精度约为15~16位有效数字。
4. 字符型数据类型:
- char(16位Unicode字符):占用2个字节,用于表示一个单一的 Unicode 字符,可以看做无符号的 16 位整数。
-String
5. 布尔型数据类型:
- bool(真或假的布尔值):占用1个字节,只有两个取值true和false。
标识符
- 使用全部字母大写的方式,并用下划线分隔单词。
- 示例:MY_CONSTANT、APP_VERSION。
请注意,以上只是一些常见的命名规则,具体的命名规范应根据实际情况和团队约定来确定。另外,还需注意不要使用C#保留关键字作为标识符。
处理异常程序1.4
try{可能出现错误的代码}
catch(Exception【异常类型】ex【变量名ex是Exception方法封装后的变量】){处理异常代码Console.WritLine(ex.Message)[用。.Message方法输出错误的原因]}
finally {始终要执行的代码}
字符串链接方法
String name = “名字1”;
Int age = 12;//年龄
//用+号链接
Console.WriteLine (“姓名:”+ name + “年龄:” + age)
//格式化输出
Console.WriteLine(string.Format (“姓名:{1} 龄:{2} “,name,age))
Console.WriteLine(string.Format ($“姓名:{ name } 龄:{ age } ”)
显示转换和隐藏转换
1显示转换: 显示转换是指将一个较大范围的数据类型转换为较小范围的数据类型。这种转换可能会导致数据丢失或溢出。要进行显示转换,可以使用强制类型转换操作符,即将目标类型放在括号中,并在其前面加上要转换的变量。例如:
int num = 1000; byte b = (byte)num;//显示转换为二进制 Byte
2隐藏转换: 隐藏转换是指将一个较小范围的数据类型转换为较大范围的数据类型,或者将派生类转换为基类。这种转换是隐式完成的,不需要使用强制类型转换操作符。例如:
int num = 123;
float f = num;//float 比int大所以可以直接隐式转换
在上面的示例中,我们将一个int类型的变量num隐式转换为double类型的变量d。由于double类型的范围比int类型大,因此可以进行隐藏转换。
分支语句Swtich,if
If(条件){分支}else{分支}
switch(expression【变量】)
{
case value1://case为多个
//当expression等于value1时执行这里的代码
break;
case value2:
//当expression等于value2时执行这里的代码
break;
}
循环语句
for (初始化[eg :i = 0]; 条件判断【eg: i < n】; 迭代器【步长表达式】)
{
// 循环体
}
while (condition【条件表达式】)
{
// 循环体
}
do
{
循环体
}
while(条件表达式);
break和continue关键字
break停止循环 Return停止循环(返回值)
continue跳出当前循环跳到外面的循环
Eg:while(true){ break }
运算符和逻辑运算符
与或非:&& | ^
加减乘除:+ - * /
复合运算符 sum += 5 ##== sum = sum + 5
##重点自己加减:
--x 是前缀递减运算符,表示先将 x 的值减 1,然后再返回递减后的值。
x-- 是后缀递减运算符,表示先返回 x 的原始值,然后再将 x 的值减 1。
数组
特性: 1相同数据类型,
2固定大小,3有序的内存空间链接【下标从0开始】
数组声明:type[]名称;type数据类型
读取数组长度:Console. WriteLine (名称.Length);
通过下标访问(从0开始):Console.Writeline(名称【0】);
Array关键字可以控制数组排序找 下标
引用类型“改变后面被赋值的变量,也会改变原来的变量”数组默认为引用类型
定义引用变量需要使用相应的数据类型,并使用关键字ref或out进行声明。
ref
关键字
- 用途:
ref
关键字用于按引用传递参数。这意味着,当你将一个变量作为参数传递给一个方法,并希望在方法内部对这个变量进行修改,且这些修改能够反映到原始变量上时,你应该使用ref
关键字。- 使用方式:在方法定义和调用时,都需要在参数前加上
ref
关键字。- 示例:
void ModifyValue(ref int value)
{
value = value + 10;
}
int x = 5;
ModifyValue(ref x);
Console.WriteLine(x); // 输出 15
csharp复制代码
在这个例子中,ModifyValue
方法接收一个 ref
参数 value
,并对其进行了修改。由于 x
是按引用传递的,所以 x
的值也被修改为 15。
out
关键字
- 用途:
out
关键字也用于按引用传递参数,但它有一个额外的用途:允许方法返回多个值。此外,使用out
参数的方法必须为out
参数赋值,并且在方法调用之前,不需要为out
参数赋初始值(尽管在某些情况下这样做可以避免编译器错误或警告)。- 使用方式:在方法定义时,需要在参数前加上
out
关键字。在方法调用时,也需要使用out
关键字,并且通常需要使用out
参数接收方法的返回值(尽管技术上可以不使用接收变量,但这通常不是好的做法)。- 示例:
void GetCoordinates(out int x, out int y)
{
x = 10;
y = 20;
}
int a, b;
GetCoordinates(out a, out b);
Console.WriteLine($"x: {a}, y: {b}"); // 输出 x: 10, y: 20
在这个例子中,GetCoordina