網站首頁 編程語言 正文
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修飾符不適用于嵌套在父類型中的類型。它也不適用于方法屬性、事件和字段,但語言設計說明解釋說:“為非類型文件范圍的成員留出設計空間,以便以后出現?!?/strong>
例如:
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仍然是避免類型名稱沖突的首選方法。
原文鏈接:https://www.cnblogs.com/gmval/p/16980500.html
相關推薦
- 2022-04-20 C++的多態和虛函數你真的了解嗎_C 語言
- 2022-04-21 C語言中結構體實例解析_C 語言
- 2022-03-29 詳解python字符串相關str_python
- 2022-03-22 .NET?6開發TodoList實現請求日志組件HttpLogging_實用技巧
- 2022-08-20 在?pytorch?中實現計算圖和自動求導_python
- 2022-07-26 SpringMVC的流程
- 2023-11-20 python獲取當前路徑所有文件
- 2022-06-14 Python?torch.fft.rfft()函數用法示例代碼_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支