c# 知识点查漏补缺(自用)

目录

using 结构

显式释放资源


ps: 用 # 是为了提亮注释颜色,应用 //

using 结构

在 C# 中,using 结构用于确保在代码块结束时释放资源。它主要用于处理实现了 IDisposable 接口的资源(IDisposable 接口只包含一个名为 Dispose() 的方法),这些资源需要在使用完毕后显式释放,以便及时回收内存和清理资源。

using 结构的语法如下:

using (ResourceType resource = new ResourceType())
{
    # 使用 resource 对象进行一些操作
    # 这个代码块结束后,resource 对象会被自动释放(调用 Dispose 方法)
}

ResourceType 是需要释放资源的类型,它实现了 IDisposable 接口。

using 结构内部,我们创建了一个 resource 对象,然后在代码块内对其进行一些操作。当代码块结束时,无论是正常执行还是发生异常,using 结构会自动调用 resource.Dispose() 方法来释放资源。

例子:

using (StreamReader reader = new StreamReader(filePath))
            {
                string content = reader.ReadToEnd();
                Console.WriteLine("文件内容:");
                Console.WriteLine(content);
            }
            # 在此处,using 结构结束,reader 对象会被自动释放(调用 Dispose 方法)

 用 using 结构来创建一个 StreamReader 对象来读取文件 "example.txt" 的内容。无论读取文件是否成功,当代码块结束时,StreamReader 对象都会被自动释放,这样可以确保文件资源得到正确释放。

ps:using 结构仅在使用需要显式释放资源的情况下才使用。对于不需要显式释放资源的对象,C# 的垃圾回收机制会自动进行内存管理。

显式释放资源

需要显式释放资源的情况通常涉及与外部系统进行交互的资源,如文件、数据库连接、网络连接、图形界面资源等。这些资源的创建和管理可能涉及非托管资源(由操作系统或外部库分配的资源),在使用完毕后,需要显式释放资源以确保资源的正确释放和回收。

以下是一些需要显式释放资源的情况:

  1. 文件操作:在读写文件时,使用 FileStreamStreamReader/StreamWriter 等文件操作类。在完成文件操作后,需要使用 using 结构或手动调用 Dispose 方法来释放相关资源。

  2. 数据库连接:使用 SqlConnectionMySqlConnection 或其他数据库连接类进行数据库操作。在使用完毕后,必须显式关闭数据库连接并释放资源,以避免数据库连接池溢出或资源泄漏。

  3. 网络连接:在与网络资源进行交互时,使用 HttpClientTcpClient 等网络连接类。在完成网络操作后,需要释放网络连接资源。

  4. 图形界面资源:在使用图形界面库如 Windows Forms 或 WPF 创建界面时,涉及到窗口、图形对象、绘图上下文等资源。在关闭窗口或界面时,需要显式释放这些资源。

  5. 外部系统调用:在与外部系统进行交互或调用外部库时,可能涉及到资源的分配和管理。在完成操作后,需要适时释放这些资源。

而对于一些托管资源,由于 C# 的垃圾回收机制,它们不需要显式释放资源。以下是一些不需要显式释放资源的对象:

  1. 纯托管对象:只包含托管代码的类实例,例如自定义的数据结构、简单的数据类型和变量等。

  2. 字符串:C# 中的字符串类型(string)由 CLR 自动管理其内存。

  3. 集合类:例如 List<T>Dictionary<TKey, TValue> 等,当不再使用时,它们的内存会被自动回收。

  4. 自动分配的局部变量:方法内部声明的局部变量,当超出作用域后会被自动回收。

总之,对于托管资源,C# 的垃圾回收机制会自动管理内存和资源的释放,而对于涉及非托管资源的情况,需要显式释放资源,以确保资源的正确回收和释放。在这些情况下,使用 using 结构或手动调用 Dispose 方法是一种良好的实践。

 

方法定义:

在C#中,方法的定义通常遵循一定的格式。方法的格式包括以下主要部分:

  1. 访问修饰符(Access Modifier): 定义方法的可访问性,例如 publicprivateprotected 等。它决定了方法是否可以从其他类中访问。

  2. 修饰符(Modifiers): 包括其他修饰符,例如 static(静态方法)、virtual(虚方法)、override(覆盖基类方法)等。

  3. 返回类型(Return Type): 指定方法的返回值类型。如果方法不返回任何值,则使用 void

  4. 方法名(Method Name): 方法的名称,用于标识方法。

  5. 参数列表(Parameter List): 方法接受的输入参数列表,如果没有参数,则为空括号。

  6. 方法体(Method Body): 包含在花括号 {} 中的语句块,包括方法的实际逻辑。

例:public static Car CarCreate(string car)

  • 访问修饰符是 public,表示该方法可以从其他类中访问。
  • 修饰符是 static,表示这是一个静态方法。
  • 返回类型是 Car,表示该方法将返回一个 Car 类型的对象。
  • 方法名是 CarCreate
  • 参数列表包含一个参数 string car,表示输入的汽车类型。
  • 方法体包含了实际的逻辑,根据输入参数创建不同类型的汽车对象。

根据具体的需求和场景,方法的格式可能会有所不同。例如,是否有返回值、是否有参数等都会影响方法的格式。

父类子类抽象类:子类不用重新创建在父类已经定义的非抽象方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值