unity的C#学习——命名空间的定义与访问、using语句的常见用法

这篇具有很好参考价值的文章主要介绍了unity的C#学习——命名空间的定义与访问、using语句的常见用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


命名空间

在C#中,命名空间(Namespace)是一种将类和其他相关类型组织在一起的方式。可以将命名空间看作是一个容器,用于管理和组织类和其他类型。通过将相关的类型组织在一起,可以使代码更加清晰和易于维护。

命名空间的主要目的是为了避免名称冲突,使得开发人员可以使用相同名称来命名不同的类型

1、命名空间的定义与访问

命名空间的定义是以关键字 namespace 开始,后跟命名空间的名称,如下所示:

// 定义命名空间
namespace namespace_name
{
   // 代码声明
}

// 嵌套定义命名空间
namespace namespace_name1 
{
   // 代码声明
   namespace namespace_name2 
   {
     // 代码声明
   }
}
  • C#中的命名空间可以包含其他命名空间和类,即命名空间可以嵌套,并且可以在同一个文件中定义多个命名空间
  • 在命名空间中定义的类型可以通过完全限定名称(包括命名空间和类型名称)namespace_name.item_name;
    来访问。
  • 例如,如果在命名空间A中定义了一个类B,那么可以使用A.B的方式来访问这个类。
using System;

// 定义命名空间1
namespace first_space
{
   // 定义命名空间1中的类
   class namespace_cl
   {
      // 定义命名空间1中的方法,输出字符串"Inside first_space"
      public void func()
      {
         Console.WriteLine("Inside first_space");
      }
   }
}

// 定义命名空间2
namespace second_space
{
   // 定义命名空间2中的类
   class namespace_cl
   {
      // 定义命名空间2中的方法,输出字符串"Inside second_space"
      public void func()
      {
         Console.WriteLine("Inside second_space");
      }
   }
}

// 定义测试类,位于全局命名空间中
class TestClass
{
   static void Main(string[] args)
   {
      // 通过完全限定名称,创建命名空间1中的类的实例
      first_space.namespace_cl fc = new first_space.namespace_cl();
      // 通过完全限定名称,创建命名空间2中的类的实例
      second_space.namespace_cl sc = new second_space.namespace_cl();

      // 调用命名空间1中的方法,输出字符串"Inside first_space"
      fc.func();
      // 调用命名空间2中的方法,输出字符串"Inside second_space"
      sc.func();

      Console.ReadKey();
   }
}
  • 可以注意到,类可以放在命名空间中,也可以不放:
    • 如果不放在命名空间中,则它默认属于全局命名空间
    • 如果放在命名空间中,则需要使用完全限定名称来引用该类

当上面的代码被编译和执行时,它会产生下列结果:

Inside first_space
Inside second_space

2、全局命名空间的访问

在 C# 中,如果没有指定任何命名空间,代码就会被放置在全局命名空间中。这意味着在同一个程序集中的所有代码都可以访问这些全局命名空间中定义的类型和成员,而不需要任何特殊的引用

以下是一个简单的示例,演示了一个类放置在全局命名空间中的情况:

class GlobalClass
{
    public void GlobalMethod()
    {
        Console.WriteLine("This is a method in the global namespace.");
    }
}

namespace MyNamespace
{
    class MyClass
    {
        public void MyMethod()
        {
            // 可以直接访问全局命名空间中的类型和成员
            GlobalClass gc = new GlobalClass();
            gc.GlobalMethod();
        }
    }
}

在上面的代码中,GlobalClass 类被放置在全局命名空间中,而 MyClass 类被放置在 MyNamespace 命名空间中。在 MyMethod 方法中,可以直接访问 GlobalClass 类型和 GlobalMethod 方法,而不需要特别的命名空间引用。

3、程序集间访问命名空间

使用命名空间可以使得代码更加模块化和可重用,也可以使得代码更加易于组织和维护。在C#中,有许多预定义的命名空间,例如常见的SystemSystem.Collections,用于包含常用的类和类型。开发人员还可以定义自己的命名空间来组织自己的代码。

当我们在另一个程序集中想要使用当前程序集定义的类型,就需要在另一个程序集中通过using语句导入对应的命名空间,具体方法将在下面介绍。


using语句

在 C# 中,using 语句主要用于定义一个代码块,在该代码块结束时自动释放资源。这可以避免在程序执行过程中出现资源泄漏的问题,因为在使用资源的代码块结束时,using 语句会自动调用 Dispose 方法来释放资源。

但using语句的用法却不仅仅局限于上述一种,下面将介绍几种using语句的常见用法。

1、引入命名空间

在C#中,命名空间用于组织代码和避免命名冲突。如果要使用命名空间中的类型,需要通过using语句引入。引入后,就可以直接使用该命名空间中的类型,而不需要使用完全限定名(类似于python中的import导包)

例如,要使用System.Collections.Generic命名空间中的List类型,可以在代码文件的开头添加以下语句:

using System.Collections.Generic;

这样,在代码中就可以直接使用List类型,而不需要使用完全限定名System.Collections.Generic.List

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> numbers = new List<int>();
        numbers.Add(1);
        numbers.Add(2);
        numbers.Add(3);
        Console.WriteLine("Count = " + numbers.Count);
    }
}

对与我们自己定义的命名空间,也是同样的使用方法。以下是一个示例代码,其中命名空间MyNamespace定义了一个类MyClass

// 自定义的命名空间
namespace MyNamespace
{
    public class MyClass
    {
        public void MyMethod()
        {
            Console.WriteLine("Hello, World!");
        }
    }
}

在另一个程序集中,可以通过以下方式引用并使用MyClass

// 引入命名空间
using MyNamespace;

class Program
{
    static void Main(string[] args)
    {	// 直接使用定义的类
        MyClass obj = new MyClass();
        obj.MyMethod();
    }
}

2、自动释放资源

在C#中,有些类型需要手动释放资源,否则可能会造成内存泄漏或其他问题。例如,FileStream类型用于操作文件流,必须手动关闭才能释放资源。

为了方便起见,C#提供了using语句来自动释放资源。using语句创建一个作用域,在作用域结束时自动释放资源。例如,以下代码使用using语句打开文件流,并在使用后自动关闭:

using (var fileStream = new FileStream("example.txt", FileMode.Open))
{
    // 在此处使用文件流
}

在using语句中创建的文件流会在作用域结束时自动关闭,不需要手动调用Close方法。

需要注意的是,只有实现了IDisposable接口的类型才能使用using语句进行自动释放资源。因此,如果使用using语句,需要确保所使用的类型实现了IDisposable接口。

3、起别名

在 C# 中,可以使用 using 关键字来为一个命名空间或类型起别名,以便在代码中使用更简短的名称

例如,如果你想在代码中频繁使用 System.Collections.Generic 命名空间中的 List<T> 类,可以使用 using 关键字为其起一个别名。以下是使用 using 关键字为命名空间和类型起别名的示例:

using Alias = System.Collections.Generic.List<string>;

// 使用别名
Alias list = new Alias();
list.Add("hello");
list.Add("world");

在上面的示例中,我们使用 using 关键字为 System.Collections.Generic 命名空间中的 List<string> 类型起了一个别名 Alias。然后,我们可以在代码中使用别名 Alias 来创建新的 List<string> 对象并进行操作。

4、using static 指令

在C# 6及以上版本引入了 using static 指令,它允许在代码中使用静态成员,而不需要每次都通过类型名来访问

使用 using static 指令,可以将一个静态类的成员方法或属性导入到当前代码文件的(全局)命名空间中,从而可以直接使用方法或属性名称,而不需要通过类名来访问。

这种语法糖可以使代码更加简洁易读。以下是使用 using static 指令的示例:

using static System.Math;

public class Program
{
    public static void Main(string[] args)
    {
        double a = 3;
        double b = 4;
        double c = Sqrt(a * a + b * b);
        Console.WriteLine($"The hypotenuse of a right triangle with legs {a} and {b} is {c}.");
    }
}

在上面的示例中,我们使用 using static 指令导入了 System.Math 静态类中的全部方法,从而可以直接使用 Sqrt 方法,而不需要通过 Math 类名来访问。这样可以使代码更加简洁易读。文章来源地址https://www.toymoban.com/news/detail-674332.html

  • 需要注意的是,使用 using static 指令可能会导致命名冲突,因此应该谨慎使用。

到了这里,关于unity的C#学习——命名空间的定义与访问、using语句的常见用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++】命名空间 namespace 与 标准流 iostream ( 命名空间概念简介 | 命名空间定义 | 命名空间使用 | iostream 中的命名空间分析 )

    命名空间 namespace 又称为 名字空间 , 名称空间 , 名域 , 作用域 , 是 C++ 语言 对 C 语言 的扩展 之一 ; C++ 中的 命名空间 namespace 指的是 标识符 的 可见范围 , C++ 标准库中的 所有 标识符 , 都定义在 std 命名空间中 ; 命名空间 英文名称是 \\\" namespace \\\" , name 是 名字 , 名称 的意思 ,

    2024年02月12日
    浏览(44)
  • [Unity命名空间教程]介绍Unity新自带的命名空间UnityEngine.Pool

      大家都知道在一些游戏中常常要创建大量的游戏对象,如果这些对象长期占用一些内存而没有触发垃圾回收机制(以下简称GC)或者过于频繁的触发GC就会导致游戏的帧数暴跌,在移动设备直接造成卡死的现象,那引用对象池的概念,能让这些游戏对象在刚开始的时候就被初

    2023年04月11日
    浏览(47)
  • c++命名空间和include C++ #include<string> 和 using std::string

    1、C++中的命名空间namespace_51CTO博客_c++中的命名空间   2、 C++ #includestring 和 using std::string_yang20141109的博客-CSDN博客 //不光要加头文件,和C语言不同 #include utils/Errors.h //还要加using using android::status_t; using android::INVALID_OPERATION; using android::NO_ERROR; using android::BAD_VALUE; 3、c和c++的差

    2023年04月20日
    浏览(49)
  • c++命名空间和include C++ #include<string> 和 using std::string

    1、C++中的命名空间namespace_51CTO博客_c++中的命名空间   2、 C++ #includestring 和 using std::string_yang20141109的博客-CSDN博客 //不光要加头文件,和C语言不同 #include utils/Errors.h //还要加using using android::status_t; using android::INVALID_OPERATION; using android::NO_ERROR; using android::BAD_VALUE; 3、c和c++的差

    2023年04月20日
    浏览(49)
  • C++命名空间的定义以及使用

    🌏博客主页: 主页 🔖系列专栏: C++ ❤️感谢大家点赞👍收藏⭐评论✍️ 😍期待与大家一起进步! 在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名

    2024年02月02日
    浏览(41)
  • Spring 自定义命名空间并解析 NameSpaceHandler

    主要有以下四步: 编写Schema文件 自定义NameSpaceHandler 绑定命令空间 自定义 BeanDefinitionParse 解析XML作为bd的配置元信息 命名空间映射XML 需要注意的时,把 spring.handlers 文件与 spring.schemas 放在 resource目录下的META-INF文件中 Schema文件 myschema.xsd 放在任意位置均可,但后面命名空间

    2024年02月12日
    浏览(78)
  • C#工程建立后修改工程文件名与命名空间

    使用之前的项目做二次开发,项目快结束的时候,需要把主项目的名称修改成我们想要的。 之前从来没有这么干过,记录一下。 步骤如下: 1:打开vs2010项目解决方案,重命名,如下图所示: 2、接下来要改名代码中的名称空间名,任意打开一个程序文件,找到命名空间名,

    2024年02月12日
    浏览(34)
  • 【VUE】ArcoDesign之自定义主题样式和命名空间

    Arco Design是什么? Arco Design 是由字节跳动推出的企业级产品的完整设计和开发解决方案前端组件库 官网地址:https://arco.design/ 同时也提供了一套开箱即用的中后台前端解决方案: Arco Design Pro (https://pro.arco.design/) Arco Design 样式基于 less 技术栈,但也同 ElementPlus 默认主题,CS

    2024年02月08日
    浏览(52)
  • C# 图解教程 第5版 —— 第22章 命名空间和程序集

    ​ 在许多项目中,会使用其他程序集的类或类型,而不仅仅是自己声明的。这些程序集(称为类库)可能来自 BCL 或第三方供应商,也可以是自己创建的。通常这些程序集文件的名称以 .dll 扩展名结尾,而不是 .exe。 图22.1 SuperLib 源代码和结果程序集 ​ 假设还要写一个名为

    2024年01月18日
    浏览(40)
  • Mybatis之简介、使用操作(安装、XML、SqlSession、映射的SQL语句、命名空间、作用域和生命周期)

    学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需写作干货注入能量… 热爱写作,愿意让自己成为更好

    2024年02月04日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包