C# 11新特性之file关键字
2024-10-20 16:49:01
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
关键字是类型修饰符,这也意味着它不能与其他修饰符一起使用,比如public
、internal
、private
等。
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仍然是避免类型名称冲突的首选方法。
欢迎大家关注我的微信公众号,一起进步,一起成长
最新文章
- string和stringBuilder区别
- Python学习 之 编程
- 【项目经验】如何用TexturePacker &; Physicseditor开发游戏
- 【图文教程】用“iz3d”软件将您的游戏打造为红蓝3D游戏。
- 跨平台编程中的宏定义(__LINE__和__DATE__极其有用)
- 【从翻译mos文章】oracle linux 和外部存储系统 关系
- C#正则分组实例
- CodeForces--TechnoCup--2016.10.15--ProblemB--Bill Total Value(字符串处理)
- 解决Chrome动画”卡顿”的办法
- Java数据结构和算法(九)——高级排序
- IIS运行一段时间不响应的解决方法
- 15、解决14中csv用excel打开乱码的问题 open('zhihu.csv','w',newline='',encoding='utf-8-sig')
- winrar压缩过滤文件及文件夹
- cocos2d-x 2.1.4 项目配置过程
- PowerDesigner使用积累
- TOP100summit2017:Riot Games 李仁杰——大数据落地要找到数据和经验的平衡点
- 使用C#开发数据库应用程序
- 什么是pytorch(1开始)(翻译)
- To zero
- Linux下管道重定向使用以及Shell编程(操作系统)