C#入门 部分知识点 个人学习笔记

视频【002-C#介绍和体验】 B站:IT萌叔Jack

C#语言被编译之后会 生成中间代码 .dll的程序集文件。

在C#中,整型数据类型包括以下几种:

  1. sbyte:8位有符号整数类型
  2. byte:8位无符号整数类型
  3. short:16位有符号整数类型
  4. ushort:16位无符号整数类型
  5. int:32位有符号整数类型
  6. uint:32位无符号整数类型
  7. long:64位有符号整数类型
  8. ulong:64位无符号整数类型

有符号整数是指可以表示正数、负数和零的整数,而无符号整数只能表示非负整数,即零和正整数。

例如,如果使用sbyte类型,它是一个有符号类型,范围是-128到127。如果使用byte类型,它是一个无符号类型,范围是0到255。

常量存储 const 数据类型 常量名 =存储的数据


数据类型

数据类型:数据类型不仅定义类开辟的内存空间大小,也同时约束了存储数据的范围。

进制转换

在 C# 中,可以使用以下几个函数进行进制转换:

  1. Convert.ToString(int value, int toBase):将一个整数值转换为指定进制的字符串形式。第一个参数是要转换的整数值,第二个参数是目标进制。例如,使用Convert.ToString(10, 2)可以将十进制数10转换为二进制字符串1010。

  2. Convert.ToInt32(string value, int fromBase):将一个指定进制的字符串形式转换为整数值。第一个参数是要转换的字符串,第二个参数是源进制。例如,使用Convert.ToInt32("1010", 2)可以将二进制字符串1010转换为十进制数10。

  3. int.Parse(string s, NumberStyles style):将一个字符串转换为整数值,可以指定字符串的格式。第一个参数是要转换的字符串,第二个参数是转换的选项,例如指定字符串表示的是十六进制数。例如,使用int.Parse("A", NumberStyles.HexNumber)可以将十六进制字符串A转换为整数值10。

  4. 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

【038-ref和out】 B站 萌叔Jack

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的建议:

·多练习[代码是敲出来的,不是看出来的]
·多整理[整理自己的编程过程,理出自己的编程思路和语言知识体系]
·多排错[遇到错误解决错误才是程序员真实的开发经验]
·多分享[检验会不会的标准不是能写出来,而是能给别人清楚的讲解出来]

posted @ 2023-03-15 18:17  专心Coding的程侠  阅读(165)  评论(0编辑  收藏  举报