【C#学习Day11笔记】正则、内存模型(堆栈)、继承与时间处理

发布于:2025-07-27 ⋅ 阅读:(12) ⋅ 点赞:(0)

前言

在C#第11天的学习中,我系统掌握了正则表达式内存模型(堆栈)面向对象继承时间处理四大核心主题。本文完整保留我的课堂笔记和代码实践,通过结构化梳理帮助大家系统掌握这些关键知识。所有代码示例均来自我的实际操作,保留原始命名和实现逻辑!


一、正则表达式实战

1. 正则基础与特殊字符串

// 原始字符串与@字符串的区别
string s1 = "aaa\nbbb";  // 转义换行
string s2 = @"aaa\nbbb"; // 直接显示\n
Console.WriteLine(s1); 
Console.WriteLine(s2);

2. 正则匹配与替换

string string1 = "abc123abc123abc";

// 创建正则匹配字母"a"
Regex reg1 = new Regex(@"a"); 
Console.WriteLine(reg1.Replace(string1, "*")); 
// 输出:*bc123*bc123*bc

// 匹配数字和斜杠
Regex reg = new Regex(@"[\d/]");
string str = "福/克斯变废676468为宝/六分零五\u002F";
MatchCollection ms = reg.Matches(str);

// 遍历所有匹配项
foreach (Match item in ms) 
{
    Console.WriteLine(item.Value); 
}
// 输出:/ 6 7 6 4 6 8 / /

二、值类型与引用类型内存模型

1. 内存存储差异



2. 代码验证

// 值类型复制验证
int num = 10;
int num1 = num;
num = 20;
Console.WriteLine(num);   // 20
Console.WriteLine(num1);  // 10

// 引用类型共享验证
Student stu = new Student(20,"小明");
Student stu3 = stu;  // 复制引用
stu3.age = 100;
Console.WriteLine(stu.age);  // 100(共享修改)

// 结构体值复制验证
Dog d1 = new Dog("阿黄",2);
Dog d3 = d1;  // 值复制
d1.age = 1000;
Console.WriteLine(d3.age);  // 2(独立副本)

3. 类型定义

class Student {
    public int age;
    public string name;
    
    public Student(int age, string name) {
        this.age = age;
        this.name = name;
    }
}

public struct Dog {
    public string name;
    public int age;
    
    public Dog(string name, int age) {
        this.name = name;
        this.age = age;
    }
}

三、面向对象继承

1. 继承概念与实现

class Boss {
    public int HP { get; set; }
    public int SP { get; set; }
    
    public void Move() {
        Console.WriteLine("移动");
    }
}

// Class1继承Boss
class Class1 : Boss {
    public double Height { get; set; }
    
    public void minAi() {
        Console.WriteLine("Min攻击");
    }
}

// 使用继承
Class1 c2 = new Class1();
c2.HP = 100;  // 继承自Boss
c2.Move();    // 继承自Boss
c2.minAi();   // 自有方法

2. 虚方法与重写

class Boss {
    public virtual void Move() {
        Console.WriteLine("Boss只能左右移动");
    }
}

class Class1 : Boss {
    // 重写父类方法
    public override void Move() {
        Console.WriteLine("小兵随意移动");
    }
    
    // 隐藏父类方法
    public new void AI() {
        Console.WriteLine("普通攻击");
    }
}

四、只读字段特性

1. 只读字段规则

class Class1 {
    public readonly string name = "张三"; // 声明时初始化
    
    public Class1(string name) {
        this.name = name; // 构造函数初始化
    }
}

// 使用示例
Class1 c2 = new Class1("王五");
Console.WriteLine(c2.name);  // 输出:王五
// c2.name = "李四"; // 错误!只读字段不能修改

五、日期与时间处理

1. DateTime基础

DateTime now = DateTime.Now;
Console.WriteLine(now);  // 当前时间

// 获取时间分量
Console.WriteLine($"年: {now.Year} 月: {now.Month} 日: {now.Day}");
Console.WriteLine($"时: {now.Hour} 分: {now.Minute} 秒: {now.Second}");

// 时间运算
DateTime future = now.AddDays(100); // 100天后
DateTime past = now.AddDays(-100);  // 100天前

2. TimeSpan时间跨度

// 计算时间间隔
DateTime birth = new DateTime(2002, 8, 4, 20, 0, 0);
TimeSpan lifeSpan = DateTime.Now.Subtract(birth);

// 输出时间跨度
Console.WriteLine($"生存天数: {lifeSpan.Days}天");
Console.WriteLine($"总小时数: {lifeSpan.TotalHours}小时");

六、学习总结

核心知识图谱




关键要点梳理

主题 核心概念 我的代码实践
正则表达式 模式匹配、特殊字符处理 Regex类应用
内存模型 值类型栈存、引用类型堆存 StudentDog验证
继承机制 代码复用、层次关系 Boss基类设计
虚方法 多态实现、方法重写 override关键字
只读字段 初始化限制、安全访问 readonly字段
时间处理 日期获取、时间运算 DateTime.Now应用

实用编程技巧

  1. 正则优化​:
    • 预编译常用正则提升性能
    • 使用RegexOptions.IgnoreCase忽略大小写
  2. 内存管理​:
    • 结构体用于小于16字节的数据
    • 引用类型注意空值检查
  3. 继承设计​:
    • 使用protected保护子类访问
    • 合理使用sealed防止过度继承
  4. 时间处理​:
    • 使用DateTime.UtcNow处理时区问题
    • TimeSpan适合计算时间间隔

编程箴言
"理解内存模型是写出高效代码的基础,掌握正则能处理复杂文本,善用继承让代码优雅而强大"

学习建议​:

  1. 在日志分析中实践正则表达式
  2. 通过内存查看工具观察不同类型的内存分配
  3. 设计三层继承结构的类体系
  4. 开发个人生日倒计时程序


网站公告

今日签到

点亮在社区的每一天
去签到