日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C#11新特性之file關鍵字的用法教程_C#教程

作者:gmval ? 更新時間: 2023-01-12 編程語言

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修飾符不適用于嵌套在父類型中的類型。它也不適用于方法屬性、事件和字段,但語言設計說明解釋說:“為非類型文件范圍的成員留出設計空間,以便以后出現?!?/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