本文介绍了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)
1018

被折叠的 条评论
为什么被折叠?



