C#11 添加了文件作用域类型功能:一个新的 file 修饰符,可以应用于任何类型定义以限制其只能在当前文件中使用。这样,我们可以在一个项目中拥有多个同名的类。

示例

新建一个控制台程序,添加两个类,分别为File1.cs和File2.cs

//File1.cs
namespace ConsoleApp
{
file static class FileWidget
{
public static string Widget() => "File1";
}
static class GetFileWidget1
{
internal static string GetString()=> FileWidget.Widget();
}
}
//File2.cs
namespace ConsoleApp
{
file static class FileWidget
{
public static string Widget() => "File2";
}
static class GetFileWidget2
{
internal static string GetString() => FileWidget.Widget();
}
}

两个文件中,定义了相同的FileWidget类。但它们只在自己的文件中有效。

这时,我们调用两个文件对应的方法,可以正常输出!

using ConsoleApp;

Console.WriteLine(GetFileWidget1.GetString());
Console.WriteLine(GetFileWidget2.GetString());

file不可以与其他修饰符一起使用

需要注意的是:从C# 11开始,file关键字是类型修饰符,这也意味着它不能与其他修饰符一起使用,比如publicinternalprivate 等。

file可以修饰的类型

file可以在以下类型中使用。

  • class
  • struct
  • interface
  • enum
  • delegate
  • record
  • record struct

file 不可修饰的类型

file修饰符不适用于嵌套在父类型中的类型。它也不适用于方法属性、事件和字段,但语言设计说明解释说:“为非类型文件范围的成员留出设计空间,以便以后出现。”

例如:

file interface IFileWidget
{
file void Widget();
}

这时会有报错:

file 可以有一个或多个同名类

在一个项目中,可以有一个internal级别类,同时可以拥有一个或多个file级别的同名类。 唯一的缺点是文件类不能在公共类中使用。

例如,我们修改一下File1.cs

namespace ConsoleApp
{
file static partial class FileWidget
{
public static string Widget() => "File1";
}
file static partial class FileWidget
{
public static string GetWidget() => "File";
}
static class GetFileWidget1
{
internal static string GetString()=> FileWidget.Widget();
internal static string GetString2()=> FileWidget.GetWidget();
}
}

控制台输出一下:

using ConsoleApp;

Console.WriteLine(GetFileWidget1.GetString());
Console.WriteLine(GetFileWidget1.GetString2());
Console.WriteLine(GetFileWidget2.GetString());

没有任何问题!

总结

namespace仍然是避免类型名称冲突的首选方法。


欢迎大家关注我的微信公众号,一起进步,一起成长

最新文章

  1. string和stringBuilder区别
  2. Python学习 之 编程
  3. 【项目经验】如何用TexturePacker & Physicseditor开发游戏
  4. 【图文教程】用“iz3d”软件将您的游戏打造为红蓝3D游戏。
  5. 跨平台编程中的宏定义(__LINE__和__DATE__极其有用)
  6. 【从翻译mos文章】oracle linux 和外部存储系统 关系
  7. C#正则分组实例
  8. CodeForces--TechnoCup--2016.10.15--ProblemB--Bill Total Value(字符串处理)
  9. 解决Chrome动画”卡顿”的办法
  10. Java数据结构和算法(九)——高级排序
  11. IIS运行一段时间不响应的解决方法
  12. 15、解决14中csv用excel打开乱码的问题 open('zhihu.csv','w',newline='',encoding='utf-8-sig')
  13. winrar压缩过滤文件及文件夹
  14. cocos2d-x 2.1.4 项目配置过程
  15. PowerDesigner使用积累
  16. TOP100summit2017:Riot Games 李仁杰——大数据落地要找到数据和经验的平衡点
  17. 使用C#开发数据库应用程序
  18. 什么是pytorch(1开始)(翻译)
  19. To zero
  20. Linux下管道重定向使用以及Shell编程(操作系统)

热门文章

  1. python csv写入多列
  2. 面试突击86:SpringBoot 事务不回滚?怎么解决?
  3. Android类加载流程
  4. 【Java8新特性】- Stream流
  5. [C#]SourceGenerator实战: 对任意对象使用await吧!!!
  6. Vue学习之--------事件的基本使用、事件修饰符、键盘事件(2022/7/7)
  7. win10桌面右键卡顿卡死解决方法
  8. Trino Worker 规避 OOM 思路
  9. VS使用正则表达式删除程序中的空行
  10. 七、docker镜像私有仓库