C#入门 部分知识点 个人学习笔记
C#语言被编译之后会 生成中间代码 .dll的程序集文件。
在C#中,整型数据类型包括以下几种:
- sbyte:8位有符号整数类型
- byte:8位无符号整数类型
- short:16位有符号整数类型
- ushort:16位无符号整数类型
- int:32位有符号整数类型
- uint:32位无符号整数类型
- long:64位有符号整数类型
- ulong:64位无符号整数类型
有符号整数是指可以表示正数、负数和零的整数,而无符号整数只能表示非负整数,即零和正整数。
例如,如果使用sbyte类型,它是一个有符号类型,范围是-128到127。如果使用byte类型,它是一个无符号类型,范围是0到255。
常量存储 const 数据类型 常量名 =存储的数据
数据类型
数据类型:数据类型不仅定义类开辟的内存空间大小,也同时约束了存储数据的范围。
进制转换
在 C# 中,可以使用以下几个函数进行进制转换:
- Convert.ToString(int value, int toBase):将一个整数值转换为指定进制的字符串形式。第一个参数是要转换的整数值,第二个参数是目标进制。例如,使用Convert.ToString(10, 2)可以将十进制数10转换为二进制字符串1010。
- Convert.ToInt32(string value, int fromBase):将一个指定进制的字符串形式转换为整数值。第一个参数是要转换的字符串,第二个参数是源进制。例如,使用Convert.ToInt32("1010", 2)可以将二进制字符串1010转换为十进制数10。
- int.Parse(string s, NumberStyles style):将一个字符串转换为整数值,可以指定字符串的格式。第一个参数是要转换的字符串,第二个参数是转换的选项,例如指定字符串表示的是十六进制数。例如,使用int.Parse("A", NumberStyles.HexNumber)可以将十六进制字符串A转换为整数值10。
- int.TryParse(string s, out int result):尝试将一个字符串转换为整数值,并将转换的结果存储在一个输出参数中。第一个参数是要转换的字符串,第二个参数是一个输出参数,用于存储转换的结果。如果转换成功,返回true,否则返回false。这个函数常用于需要处理用户输入的情况,可以避免输入非法字符导致程序崩溃。
需要注意的是,这些函数在使用时需要注意输入参数的格式和数据范围,以避免出现数据转换错误的情况。同时,需要注意不同进制之间的转换可能会导致精度丢失或溢出等问题。
转义字符和@
在 C# 中,有两种方式表示字符串,一种是使用转义字符,一种是使用 @ 符号。
转义字符
C# 中的转义字符是以反斜杠(\)开头的特殊字符,它们表示一些无法在字符串中直接表示的字符,例如换行符、制表符等等。常见的转义字符包括:
\n:换行符
\r:回车符
\t:制表符
":双引号
':单引号
\:反斜杠
例如,下面是一个使用转义字符表示换行符的示例:
string str = "Hello\nworld!";
Console.WriteLine(str);
输出结果为:
Hello
world!
需要注意的是,在使用转义字符时需要注意转义字符的顺序和转义字符的个数,否则可能会导致语法错误。
@ 符号
@ 符号也可以用于表示字符串,它的作用是使字符串成为“逐字字符串”(verbatim string),即在字符串中不会进行任何转义,所有的字符都会按照字面意义进行解释。使用 @ 符号表示字符串时,可以在字符串中直接使用双引号(")和反斜杠(\)等特殊字符,而不需要进行转义。
例如:
string str = @"Hello\tworld!";
Console.WriteLine(str);
输出结果为:
Hello\tworld!
需要注意的是,逐字字符串中的双引号需要使用两个双引号表示,例如:
string str = @"He said, ""Hello world!""";
Console.WriteLine(str);
输出结果为:
He said, "Hello world!"
总的来说,在编写字符串时,可以根据需要选择使用转义字符或逐字字符串,以方便地表示和处理字符串中的特殊字符。
隐式转换
隐式转换⼀般指的是编译器默认⾃动帮助开发者进⾏的类型转换,因此可⻅该转换⼀般是⽐较安全的。隐式转换⼀般发⽣的条件
如下:
⼩类型转⼤类型,可以理解为⼩空间转⼤空间,如:int(4字节)可以转为long(8字节)
⼩范围转⼤范围,可以理解为有符号数包含⽆符号数据的范围,如:uint可以转换为long
内在有联系的数据类型, 可以理解为底层是该类型实现的:char可以转为int
派⽣类(⼦类)转基类(⽗类),这⾥针对的是引⽤类型的数据,如:任意类型转object类型
类型转换
字符串转换
基本类型数据和字符串之间经常需要进⾏转换来处理数据,因此本章节我们重点给⼤家讲解下 基本类型转换为字符串 和 字符串转换为基本数据类型。
基本数据类型和字符串之间的转换⼀般有以下⽅法:
基本类型转字符串:+"" (拼接字符串法)、基本类型.ToString()
字符串转基本类型:Convert.ToXxx()、基本类型.Parse()
类型.Parse()⽅式
string boolValue = "false";
bool value = bool.Parse(boolValue);
Parse是C#中用于将字符串转换为其他数据类型的方法之一。它的作用是将给定字符串中的内容解析(Parse)成对应的类型。
例如,在上述代码中,boolValue是一个字符串类型的变量,它的值是"false"。我们使用bool.Parse()方法将字符串类型的变量转换为布尔型(bool)变量。该方法解析boolValue中的值,如果该值为"True"(不区分大小写)则返回true,否则返回false。
需要注意的是,如果字符串无法转换为要求的类型,Parse方法将抛出一个异常。因此,在使用Parse方法进行类型转换时,应该确保字符串格式的正确性,否则需要使用try-catch语句来处理异常。
此外,几乎所有的基本数据类型和日期/时间类型都具有相应的Parse方法。例如:
- int.Parse() : 将字符串转换为整数类型int
- double.Parse():将字符串转换为浮点数类型double
- DateTime.Parse():将字符串转换为日期/时间类型DateTime
- Enum.Parse():将字符串转换为枚举类型Enum
使用Parse方法可以很方便地将字符串转换为所需的类型,从而进行相应的操作。
运算符
其它运算符
public static void Main(string[] args)
{
// 结果:1
Console.WriteLine(sizeof(bool));
// 结果:System.Int32 的字节码⽂件,反射技术使⽤
Console.WriteLine(typeof(int));
// 结果:⼤于
Console.WriteLine(12 > 10 ? "⼤于" : "⼩于");
// 结果:True
Console.WriteLine("jack" is string);
object obj = "jack";
string name = obj as string;
// 结果:jack
Console.WriteLine(name);
}
ref和out
ref和out的区别
- 两者都是按地址传递的,使⽤后都将改变原来参数的数值
- ref会把参数的数值传递进函数,但是out会把参数的数值清空,也就是说out类型的参数传递进去后,参数的数值为空,⽆法输出,因此必须初始化⼀次
⼀⾔以概之:ref是有进有出,out是只出不进
- ref参数的传递必须先初始化,⽽out不需要显式初始化
private static void ChangeValue(ref int num)
{
// ref关键字保留值 因此可以直接输出;
//修改为out关键字会报错,因为out会清空传递进来的值
Console.WriteLine($"{num}"); //增加了函数内部的变量输出
num = 10;
}
static void Main(string[] args)
{
int value = 20;
// 结果:20
Console.WriteLine($"修改前:{value}");
// 调⽤函数
ChangeValue(ref value);
// 结果:10
Console.WriteLine($"修改后:{value}");
Console.ReadKey();
}
private static void ChangeValue(out int num)
{
num = 10;
Console.WriteLine($"{num}"); //增加了函数内部的变量输出
}
// ref参数需要初始化,out参数不需要初始化
static void Main(string[] args)
{
int value = 20;
// 结果:20
Console.WriteLine($"修改前:{value}");
// 调⽤函数
ChangeValue(out value);
// 结果:10
Console.WriteLine($"修改后:{value}");
Console.ReadKey();
}
萌叔Jack的建议:
·多练习[代码是敲出来的,不是看出来的]
·多整理[整理自己的编程过程,理出自己的编程思路和语言知识体系]
·多排错[遇到错误解决错误才是程序员真实的开发经验]
·多分享[检验会不会的标准不是能写出来,而是能给别人清楚的讲解出来]