C# 11新特性之file关键字

news2024/11/18 22:46:15

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

目录

  • 示例
  • file不可以与其他修饰符一起使用
  • file可以修饰的类型
  • file 不可修饰的类型
  • 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仍然是避免类型名称冲突的首选方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/81093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

主流报表开发工具FastReport.Net全新发布,邀您体验最新版试用

FastReport .Net是一款适用于 WinForms、Blazor Server、ASP.NET、MVC、.NET 6 和 .NET Core 的报告生成工具。FastReport代表着“速度”、“可靠”和“品质”,是当今主流的报表开发工具。 该产品在本月进行了重大版本v2023的发布,接下来让我们一起看看…

【OpenCV-Python】教程:4-9 特征匹配 match

OpenCV Python 特征匹配 【目标】 特征匹配Brute-Force Matcher 和 FLANN Matcher 【理论】 Brute-Force Matcher字面意思是蛮力匹配器,所以它的过程也很简单,从一个集合里取出一个特征描述子,然后与第二个集合里的特征逐个的进行匹配比较…

传统MES架构的智能化改进---python在Aprol上的实践

一、开题依据 MES是属于生产车间级的管理信息系统。作为生产与计划之间的信息“集线器”,MES 主要包括以下功能模块:工序详细调度、资源分配和状态管理、生产单元分配、过程管理、人力资源管理、维护管理、质量管理、文档控制、产品跟踪和产品清单管理、…

Solidworks导出为URDF用于MoveIT总结(带prismatic)

环境 Solidwoks2018 SP0 / Solidwoks2021 SP5;Ubuntu20.04;ROS1 Noetic; Solidwoks2018 SP0对于平移副有问题,显示不出来,Solidwoks2021 SP5没有问题。 官网有段话: There is a known STL export bug with SolidWork…

Jdk Tomcat 安装教程 — 2022.12.11

文章目录一、安装jdk教程二、tomcat 安装三、修改Tomcat端口号安装Tomcat之前要确保安装jdk一、安装jdk教程 安装vim命令包,此操作如果执行不了,需要使用root权限执行 执行如下命令: yum install -y vim-enhanced2. 下载jdk安装包&#xff…

3D打印切片软件Cura入门

安装好之后,添加一台打印机,参数可以随便设置。 Cura安装包: 链接:https://pan.baidu.com/s/1T1MBcZYBCVfhtFKDBjypmQ?pwd2022 提取码:2022 基本操作 按住鼠标右键不放:旋转 按住滚轮不放&#xff1…

制作USB启动盘(U盘安装ubuntu20.04)

文章目录制作USB启动盘(U盘安装ubuntu20.04)制作USB启动盘的工具ubuntu20.04系统安装u盘制作进入bios制作USB启动盘(U盘安装ubuntu20.04) 制作USB启动盘的工具 制作USB启动盘的工具有rufus,UNetbootin,Un…

汇编语言—第1章 各类存储芯片及内存空间

1、各类存储器芯片 一台PC机中,装有多个存储类芯片,这些存储器芯片从物理连接上来看是独立的、不同的器件。 (1)随机存储器 用于存放供CPU使用的绝大部分程序和数据 (2)装有BIOS(Basic Input/Ou…

AI遮天传 DL-反馈神经网络RNN

本文会先介绍动态系统的概念,然后介绍两种简单的反馈神经网络,然后再介绍两种门控神经网络(LSTM, GRU),最后是关于反馈神经网络的应用(本次以语音识别为例)。 RNN: Recurrent neural network,一般叫它“反馈神经网络”或者“循环神…

1565_AURIX_TC275_开关电源模式相关寄存器

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) 这个寄存器可以设置开关电源的开关频率,之前在文档中看到过这个默认的数值是1.5M的频率,现在看来应该是这个1.56M的一个近似了。准确的数值不是1.5M而是1.56M。 1. …

任务四:标准化组织概览

标准化组织概览一、标准化组织1、ITU电信标准化部门无线电通信部门电信发展部门2、3GPP3、3GPP24、CCSA二、TDD-LTE与FDD-LTE系统的对比三、LTE技术特点及基本指标1、LTE主要技术特点2、峰值数据速率3、控制面延迟4、用户面延迟5、用户吞吐量6、频谱效率7、移动性8、覆盖9、频谱…

同事跳槽拿下阿里 P6Offer,程序员:会点基础还真不行

前阵子,同事程序员 H 偷偷的向阿里菜鸟投递了自己的简历... 不久后程序员 H 就收到了阿里菜鸟的面试通知,经历 5 轮面试,一举成功拿下 offer 并定级 P6。 小天趁着未来的阿里大佬还在身边,向程序员 H 讨教了一下面试阿里菜鸟的经…

法则三:架构师如何在一定时间内最大化自己的增量价值

法则三:架构师如何在一定时间内最大化自己的增量价值 作为一个架构师,必须要创造足够的商业价值,才能保障自己职业的长期。 那么你作为架构师,该如何为你的公司、部门或团队提供可量化的增量价值呢? 主要有扩大收入与…

2022.12.11 学习周报

文章目录摘要文献阅读1.题目2.摘要3.传统RNN存在的问题4.RNN与IndRNN的对比4.1 隐含层状态更新公式4.2 结构示意图4.3 IndRNN的优势5.IndRNN的分析5.1 RNN5.2 LSTM5.3 IndRNN的初始化5.4 梯度截断5.5 IndRNN6.实验结果6.1 Adding Problem6.2 Sequential MNIST Classification6.…

Spring 体系常用项目

如今做Java尤其是web几乎是避免不了和Spring打交道了,但是Spring是这样的大而全,新鲜名词不断产生,学起来给人一种凌乱的感觉,我就在这里总结一下,理顺头绪。 Spring Spring 概述 Spring 是一个开源框架&#xff0c…

R语言学习笔记——基础篇:第六章-基本图形

R语言 R语言学习笔记——入门篇:第六章-基本图形 文章目录R语言一、条形图1.1、垂直与水平条形图补——数据为因子时绘制垂直与水平条形图1.2、堆砌条形图与分组条形图1.3、数据整合条形图1.4、条形图的微调1.5、棘状图二、饼图三、直方图四、核密度图4.1、简易核密…

CSS基础-装饰,基线,光标类型,边框圆角(胶囊),文字溢出,元素隐藏,边框合并,css画三角形...

CSS基础-装饰 目录CSS基础-装饰1.1 认识基线(了解)1.2 文字对齐问1.3 垂直对齐方式(拓展)项目中 vertical-align 可以解决的问题2.1 光标类型3.1 边框圆角3.2 边框圆角的常见应用4.1 溢出部分显示效果5.1 元素本身隐藏(拓展)元素整体透明度(拓展)边框合并(拓展)用CSS画三角形技…

关键字(五):const和volatile

关键字一."令人误解"的关键字—const1.const的基本特质2.const的各种应用场景1.修饰变量2.修饰数组3.修饰指针4.修饰函数的参数5.修饰返回值二.最易变的关键字—volatile一."令人误解"的关键字—const 1.const的基本特质 简单的示例 const所修饰的变量不可…

[附源码]计算机毕业设计海南与东北的美食文化差异及做法的研究展示平台Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis MavenVue等等组成,B/S模式…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java在线图书馆信息管理系统g6977

好的选题直接决定了毕业设计好坏,甚至决定了能否毕业。今天,我们就来聊一聊毕设该怎么选题。 这里分三个选题标准。 第一,参考所在学校往年选题类型和难度 可以向学长学姐了解往年的选题类型,以及使用的技术,不用向…