C# 控制台应用与数据类型核心知识梳理

本文介绍了C#编程语言的基础知识,包括控制台应用程序结构、Console类常用方法、变量定义规则以及数据类型分类。重点讲解了值类型(数字、字符、布尔、枚举和结构体)和引用类型(string和object)的特性与用法,其中string具有不可变性、值比较和字符串驻留池特性,object作为所有类型的基类提供了ToString()、Equals()等通用方法。文章还详细说明了注释使用、变量命名规范以及各种数据类型的存储方式和取值范围。

C#是由微软开发的现代、面向对象的编程语言,基于.NET 框架 / 平台运行,兼具简洁性与强大功能,广泛用于桌面应用、Web 开发、游戏开发等场景.

1-初识控制台应用

C#程序的基本结构:命名空间(ConsoleApp)→ 类(Program)→ 入口方法(Main)

//命名空间引用部分
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

//定义命名空间:类和代码放在命名空间内
namespace ConsoleApp
{
    //类
    internal class Program
    {
        //Main方法
        static void Main(string[] args)
        {
           
           //在控制台中打印Hello World
           Console.WriteLine("Hello World");
           // Console.WriteLine();快捷键   cw + Tab键

           //等待控制台的输入,按下的键会直接显示在控制台.只要用户不输入控制台就一直显示
           Console.ReadKey();//返回值类型:ConsoleKeyInfo
        }
    }
}

 // 表示单行注释 快捷键: Ctrl+ k +c  或 Ctrl + /  取消注释快捷键: Ctrl +k +u 或者 Ctrl +/

 /*  */  多行注释    快捷键 :Ctrl + Shift +/

格式:以 /*  开头、 */结尾,中间包裹需要注释的内容(可跨任意行数)   

2-认识Console常用的方法和属性

在 C# 的Console类中,方法是执行特定操作的行为(如输入、输出、清屏)。属性是描述Console状态或特征的变量(如前景色、背景色、窗口大小)。

在控制台输出的方法

代码示例

//命名空间引用部分
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

//定义命名空间:类和代码放在命名空间内
namespace ConsoleApp
{
    //类
    internal class Program
    {
        //Main方法
        static void Main(string[] args)
        {//例如举例Console的方法
            Console.Beep(); // 控制台播放声音 
            Console.Beep(200, 1000);//控制台播放声音 以指定200频率 播放1000ms
            

            Console.WriteLine("在控制台打印,可以换行");
            Console.Clear();  清空控制台
            Console.Write("在控制台打印,不会换行");
            
            Console.Write("\n");//转义字符,代表换行符,

            //读取用户输入的 会显示在控制台上面 (返回值类型ConsoleKeyInfo)
            //Console.ReadKey();    
            //Console.ReadKey(true); //读取用户输入的 不会显示在控制台上面
            //Console.ReadLine();  //读取用户输入的 读取的是一个字符串类型(string)


            //例如举例Console属性
            //Console.BackgroundColor控制台的背景颜色
            Console.WriteLine(Console.BackgroundColor);
            //Console.ForegroundColor控制台的前景颜色
            Console.WriteLine(Console.ForegroundColor);


            //设置控制台的背景颜色为红色 
            Console.BackgroundColor = ConsoleColor.Red; //ConsoleColor.Red 后续的背景为红色
                                       
            Console.WriteLine(Console.BackgroundColor);//打印背景颜色是什么颜色


            Console.Clear();//清空控制台

            //等待用户输入
            Console.ReadKey();

       
        }
    }
}

3-变量

变量:表示对数据引用 列如 a 可以表示一个人的名字和工作,所以a就是变量

语法: 数据类型 变量名  例如 int a; string b;

数据类型分为两种: 值类型、引用类型

变量名格式:
          1 一般以包含数字 下划线 字母  @等字符 ,不要以数字开头,@只能放在最前面
          2.不能使用关键字列入 if for while 
          3. 尽量不要使用内置方法名或着类名
          4. 尽量不要使用汉字
          5. 不要重复定义

4-值类型

C# 中值类型分为简单类型(基本数据类型:数字、字符、布尔)和复合值类型(枚举(enum)、结构体(struct)、可空值类型(int?等))数据本体存放在 栈空间中。 

值类型 :变量保存的是值的本身,包含基本数据类型(数字类型,布尔类型,字符类型,结构体,枚举类型)

1.数字类型

byte  无符号 字节类型(占用1字节)表示的数字范围 0-255

sbyte 有符号 字节类型(占用1个字节)表示数字的范围-128 -127

short  有符号 短整型 (占用2个字节) 数字范围-32768~32767

ushort 无符号短整型 (占用2个字节)数字范围是0-65535

int 无符号整型(占用4个字节)

uint 有符号整型(占用4个字节)

long 有符号的长整型 (占8个字节

ulong 无符号的长整型 (占8个字节

float  浮点类型 赋值的时候带上 f 不区别大小写 (占8个字节)

例如:

float f1 = 100.1F;
float f2 = 100.2f;

double 双浮点类型 ,可以不用加F ,可以加d(不区分大小写) D占用(占8个字节)

decimal 十进制数据类型,可以表示整型的,也可以表示浮点类型的,以m(不区分大小写)进行结束 (占用 16个字节)

例如:

 decimal d1 = 100M;
 decimal d2 = 100m;

2.字符类型

char 字符类型 赋值的时候采用单引号(占用1字节)

char c = 'a';

3.布尔类型

 bool  “真”(true) 或 “假” (false)的基础数据类型

布尔类型的取值仅有两个:

bool b1 = true;// 赋值为“真”
bool b2 = false;// 赋值为“假”

        true :表示“真”(条件成立)

  false:表示“假”(条件不成立)

4.枚举类型

枚举类型的核心概念

  枚举将一组相关的常量值(如状态、选项、类别)封装成一个类型,每个常量称为枚举的成员

  枚举通过enum关键字声明,默认底层类型是int.(可显式指定枚举的类型,例如byte ,long)

    代码示例

    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApp
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                int x = (int)Color.Red;
                int y = (int)Season.Autumn;
                Console.WriteLine(x); //打印输出 0
                Console.WriteLine(y); //打印输出 3
    
    
            }
    
            //格式:关键字+枚举名{ 成员1,成员2,成员n}      
            // 默认底层int,成员值默认从0开始递增             
            enum Color { Red, Green, Blue }
    
            //指定底层类型(可指定类型byte、sbyte、short、ushort、int、uint、long或ulong)且自定义成员值
            //格式:关键字+枚举名+:指定类型+{成员(其中成员用逗号分隔)}
            enum Season : short
            {
                Spring = 1,
                Summer = 2,
                Autumn = 3,
                Winter = 4,
            }
        }
        
    }
    
    

    5.结构体类型

    结构体(关键字 Struct)是编程语言中一种自定义的复合数据类型,核心作用是将不同类型、但逻辑上相关的多个数据项(成员)封装成一个整体,用于描述一个 “实体” 的多维度属性。

    创建结构体的语法:

    结构体名称 变量名称 =new 结构体();

    结构体的使用:

    1.在main函数外部定义一个结构体

     //先创建一个结构体
    struct Student
     {    //定义结构体的成员 
         // public:访问修饰符,公有的   int:字段的数据类型(整型)  age:字段名(结构体的成员)          
         public int age;    
        
         public string name;        
         public string gender;
     }


    2.使用结构体

    Student student = new Student();//通过new创建Student结构体实例
     
    student.age = 19;   //进行赋值
    student.name = "张三";
    student.gender= "男";

    5.引用类型

    引用类型核心概念:

            引用类型的变量不直接存储数据本身,而是存储 数据在内存中的地址(引用 / 指针),数据本体存放在 堆空间 中。 

    引用类型:string 特殊的引用类型、对象类型(object)

    string 特殊的引用类型

    1. 不可变性

            这是 string 最核心的特性:一旦字符串创建,其内容永远无法修改,看似 “修改” 的操作 实际是创建新字符串对象。

    string str ="hello";
    str += "world"  //不是修改原"hello",而是创建新字符串"hello world"
    // 原"hello"因无引用指向,后续会被GC回收
    2. == 比较 “值” 而非 “引用”


    普通引用类型的 == 默认比较  引用地址 ,但 string 重写了 == 运算符,改为比较 字符串内容

    // 普通引用类型(Class):== 比较地址
    class Student { public string Name; }
    Student s1 = new Student { Name = "张三" };
    Student s2 = new Student { Name = "张三" };
    Console.WriteLine(s1 == s2); // 输出 false(地址不同)
    
    // string:== 比较内容
    string str1 = "张三";
    string str2 = "张三";
    Console.WriteLine(str1 == str2); // 输出 true(内容相同)
    3. 字符串驻留池

    为节省内存,C# 会将字面量字符串缓存到 “字符串驻留池”(堆中的一块特殊区域),相同字面量复用同一对象

    string a = "abc";
    string b = "abc";
    // 地址相同(复用驻留池对象)
    Console.WriteLine(object.ReferenceEquals(a, b)); // 输出 true
    
    // 但动态创建的字符串不会自动驻留
    string c = new string(new char[] {'a','b','c'});
    Console.WriteLine(object.ReferenceEquals(a, c)); // 输出 false
    
    // 手动加入驻留池
    string d = string.Intern(c);
    Console.WriteLine(object.ReferenceEquals(a, d)); // 输出 true

    对象类型(object)

    在 C# 中,object(System.Object)是整个类型系统的根,是所有类型值类型、引用类型、泛型类型、数组等)的最终基类

    核心概念:

     “任意类型可通过 object 统一承载”

    引用类型(class、delegate、interface [] 数组等)直接 / 间接继承 System.Object;

    值类型(struct、enum、基本类型如 int/string 等)继承 System.ValueType,而 ValueType 又继承 System.Object(间接继承);
    甚至 null、dynamic 也与 object 深度关联。

    object 的核心特性与方法

    System.Object 定义了 8 个核心方法(所有类型均可重写 / 调用),是所有对象的 “通用接口”

    1.tostring() 返回对象的字符串表示

    object obj1=123;
    Console.WriteLine(obj.ToString());// 输出 “123”  
    
    object obj2 = new { Name = "张三" };
    Console.WriteLine(obj2.ToString()); // 输出 "{ Name = 张三 }"(匿名类型重写)

    2.Equals(object obj)  比较两个对象是否 “相等”(默认比较引用地址(引用类型);值类型重写后比较;可自定义重写逻辑)

    3.GetHashCode()返回对象的哈希值

    4.GetType() 返回对象的运行时类型(Type 对象)

    5.MemberwiseClone() 创建对象的浅拷贝 (保护方法,仅当前类可调用;值类型拷贝值,引用类型拷贝引用(不拷贝堆对象))

    6.Finalize() 垃圾回收前执行清理操作

    7.ReferenceEquals() 静态方法,强制比较两个对象的引用地址

    8.Equals(object a, object b)  静态方法,安全比较两个对象(避免空指针) ( 若 a 为 null,则返回 b 是否为 null;否则调用 a.Equals(b))   

    //  静态Equals(空安全)
    object o4 = null;
    object o5 = null;
    Console.WriteLine(object.Equals(o4, o5)); // true(避免NullReferenceException)

    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
    红包 添加红包
    表情包 插入表情
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值