C#中对于using的使用方式

C# using关键字解析

1. 基础命名空间导入

当使用泛型集合List时,必须导入System.Collections.Generic命名空间:

using System.Collections.Generic;
using UnityEngine;

public class UsingTest : MonoBehaviour
{
    void Start()
    {
        List<int> intList = new List<int>(); // 正确使用需要前置导入
    }
}

注意事项

  • 所有using指令应放在文件顶部,命名空间声明之前
  • Visual Studio中可通过快捷键Ctrl + .自动添加缺失的命名空间

2. 静态导入(Static Import)

使用using static导入类后可直接使用静态方法:

using UnityEngine;
using static UnityEngine.Mathf; // 静态导入

public class UsingTest : MonoBehaviour
{
    void Start()
    {
        int a = 10, b = 20;
        int c = Max(a, b); // 直接调用静态方法
        
        // 当存在同名方法时的处理方案
        c = System.Math.Max(a, b); // 全限定名解决冲突
    }
}

最佳实践

  • 适用于频繁使用的工具类(如Mathf、Vector3)
  • 避免在大型项目中过度使用,防止方法名冲突

3. 全局引用(Global Using)

C# 10+ 支持全局导入(需修改项目配置):

// GlobalUsings.cs
global using System.Collections;
global using UnityEngine;
global using static UnityEngine.Mathf;

配置方法

  1. 修改.csproj文件添加:
<PropertyGroup>
    <ImplicitUsings>enable</ImplicitUsings>
    <LangVersion>preview</LangVersion>
</PropertyGroup>
  1. 创建单独文件管理全局using

优势

  • 减少重复代码
  • 统一管理公共依赖

4. 命名空间别名

解决命名冲突或简化长命名空间:

using sys = System;
using UnityMath = UnityEngine.Mathf;

public class UsingTest : MonoBehaviour
{
    void Start()
    {
        var dt = sys.DateTime.Now;
        float val = UnityMath.Sqrt(16);
    }
}

应用场景

  • 不同库中存在同名类型时
  • 简化长命名空间(如using UE = UnityEngine;

5. 资源自动管理

using语句确保非托管资源及时释放:

void ProcessFile(string path)
{
    using var fileStream = new FileStream(path, FileMode.Open);
    using var reader = new StreamReader(fileStream);
    
    string content = reader.ReadToEnd();
    // 自动调用Dispose()释放资源
}

关键点

  • 适用于实现IDisposable接口的对象
  • C# 8.0+支持using声明(无需代码块)
  • 等价于try-finally代码块
// 传统写法
using (var obj = new Resource())
{
    // 使用资源
}

版本兼容表

功能最低C#版本适用场景
基础using1.0常规类型引用
static using6.0静态方法/常量访问
global using10.0项目级统一引用
using声明式8.0简化资源管理代码

常见问题

  1. Q:为什么我的global using不生效?
    A:检查项目是否启用<LangVersion>preview</LangVersion>,并确保文件位置正确

  2. Q:using语句真的能防止内存泄漏吗?
    A:可确保及时释放非托管资源,但不能解决托管资源的内存管理问题

  3. Q:如何批量管理using指令?
    A:使用VS的"Remove and Sort Usings"功能(Ctrl+R, Ctrl+G)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值