C# 11 中的 file local type

C# 11 中的 file local type

Intro

在之前的版本中,我們想要一個類型只在當前的類型中生效,通常我們會在一個類的內部聲明一個 private 的類型以此來控制這個類型的訪問權限,在 C# 11 中引入了一個 file local type,僅在聲明類型的這個文件中可以訪問,這樣我們就可以不用聲明成一個私有類型了,下面就來看個示例吧

Sample

C# 11 新增加了一個 file 關鍵詞,這個關鍵詞也屬于訪問修飾符的一種,用于限定類型只有當前文件有效,使用和其他訪問修飾符類似,使用示例如下:

file?class?FileLocalTypeSample2
{public?int?Age?{?get;?set;?}?=?10;
}

file 本身就是一個訪問修飾符,所以它不能再與其他訪問修飾符一起使用,比如說 public/internal/private 等一起使用,否則會看到一個類似下面這樣的一個錯誤

5d6902e45e5860078fe9369581345d16.png

file 是一個類型修飾符,只能用于類型,方法、屬性等成員不能使用,也會報錯

aeccd2a585b2f4735520dd51609e3d7d.png

file 不限于 class 也可以用于接口、結構體以及 C# 9/10 引入的 record

file?class?FileLocalTypeSample2
{public?int?Age?{?get;?set;?}?=?10;
}file?record?FileLocalRecord();file?struct?FileLocalStruct
{public?string?RecordName?=>?nameof(FileLocalRecord);
}file?record?struct?FileLocalRecordStruct?{?}file?interface?IAnimal
{string?Name?=>?GetType().Name;
}file?class?Cat?:?IAnimal?{?}class?Dog?:?IAnimal?{?}

當你嘗試在另外一個文件中嘗試訪問 file 修飾的類型時,會訪問不到,比如說上面定義的類型是在 FileLocalTypeSample2.cs 文件中,而下面嘗試訪問則是在 FileLocalTypeSample.cs 文件中,就會報錯,如下所示

e493abab3a9b50b7e582213974506c0a.png

那么它是怎么實現的呢,我們可以反編譯一下我們生成的 dll,我們可以找到有一個類型和我們定義的 FileLocalTypeSample2 是一樣的,反編譯結果如下

28f00122ca16022fdb1033e41b1e65fa.png

可以看到,我們用 file 聲明的名稱其實變掉了,實際的類型修飾符是 internal 的,這也意味著我們是有機會來訪問到這個類型的,那我們就來試一下

首先直接引用這個類型,編譯器會報錯,類型不存在

3680b968f8955d0086f4f9d2cc0c5748.png

既然不能直接訪問,那我們來嘗試一下反射吧,從下圖可以看到我們成功通過反射獲取到了這一類型

7d0c6f58b812172c77d577d7bb94a1c0.png

接著我們可以創建一個實例來試試

b8765f2569852b22c275bd1b0ae43d90.png

可以看到我們成功的創建的一個實例,并獲取了其中 Age 屬性的值

More

從上面的示例,我們可以看得出來, file 關鍵詞是一個在編譯器層面實現的特性,本質是由編譯器生成了一個 internal的類型再加一些編譯檢查來限制只能在聲明的文件中進行訪問,前面雖然我們通過反射的方式創建了file 修飾的類型,但是并不推薦這樣做,隨著編譯器的更新生成的規則一旦變化就可能會 break

有一些不想不暴露出去的類型之前可能是聲明一個 private ?的類型,有了這個特性之后就可以多一種選擇了~~

References

  • https://github.com/dotnet/csharplang/issues/6011

  • https://github.com/dotnet/csharplang/blob/main/proposals/file-local-types.md

  • https://github.com/WeihanLi/SamplesInPractice/blob/master/CSharp11Sample/FileLocalTypeSample.cs

  • https://github.com/WeihanLi/SamplesInPractice/blob/master/CSharp11Sample/FileLocalTypeSample2.cs

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282555.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282555.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282555.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PHP實現類似百度搜索自動完成(代碼簡單)

一、效果圖: 二、HTML代碼 <html lang"en"> <head><meta charset"utf-8"><title>jQuery UI 自動完成&#xff08;Autocomplete&#xff09; - 默認功能</title><link rel"stylesheet" href"/public/Auto…

Mysql讀寫分離php腳本

<?php/*php如何連接mysql*/ /*$link mysql_connect(‘localhost‘, ‘root‘, ‘‘);if (!$link) {die(‘Could not connect: ‘ . mysql_error());}echo ‘Connected successfully‘;mysql_close($link);*/ /*php如何選擇數據庫*//*$link mysql_connect(‘localhost‘, …

CentOS 搭建Postfix+Dovecot簡單郵件系統

2019獨角獸企業重金招聘Python工程師標準>>> 服務器信息 系統&#xff1a;CentOS 6.5 minimal版本 主機&#xff1a;虛擬機 虛擬機IP&#xff1a;192.168.128.128/24 宿主IP:10.1.79.24/24 安裝postfix 注意&#xff1a;CentOS 7實際上已經用postfixSasl2代替sendma…

Js獲取當前頁面URL各種參數

JS獲取當前頁面URL各種參數 一&#xff1a;Location Location 對象包含有關當前 URL 的信息。 Location 對象是 Window 對象的一個部分&#xff0c;可通過 window.location 屬性來訪問。 hash設置或返回從井號 (#) 開始的 URL&#xff08;錨&#xff09;。host設置或返回主機名…

php面試題2018

一 、PHP基礎部分 1、PHP語言的一大優勢是跨平臺&#xff0c;什么是跨平臺&#xff1f; PHP的運行環境最優搭配為ApacheMySQLPHP&#xff0c;此運行環境可以在不同操作系統&#xff08;例如windows、Linux等&#xff09;上配置&#xff0c;不受操作系統的限制&#xff0c;所以…

學生黨的專屬定制福利,你想要的這里全都有!

同學們&#xff1a;您好&#xff01;很?興認識?家&#xff01;我是微軟的 Regional Cloud Advocate Kinfey Lo&#xff0c;感謝您在課余時間打開這封信。踏??秋&#xff0c;技術峰會進?了旺季&#xff0c;有?向商業的&#xff0c;有?向開發者的&#xff0c;有?向技術社…

Quartus prime16.0 與modelsim ae 聯調

前言 quartus和modelsim聯調對仿真還是很方便的&#xff0c;當然最好是quartus干綜合到燒錄的活&#xff0c;modelsim單獨仿真。而且ae版的性能比se版差。 流程&#xff1a; 1.配置modelsim ae路徑&#xff1a; 我這里是這個路徑&#xff0c;根據你自己安裝的地方配置路徑。 2.…

30分鐘搞定后臺登錄界面(103個后臺PSD源文件、素材網站)

去年八月時要做一個OA系統為了后臺界面而煩惱&#xff0c;后來寫了一篇博客&#xff08;《后臺管理UI的選擇》&#xff09;介紹了選擇過程與常用后臺UI&#xff0c;令我想不到的時竟然有許多開發者與我一樣都為這個事情而花費不少時間&#xff0c;最后界面效果還是不佳&#xf…

分析拼多多的崛起【產品思維】

最近朋友圈討論拼多多上市的新聞大火&#xff0c;各有各的看法&#xff0c;很有意思&#xff0c;突然想起前段時間得到上的《梁寧-產品思維30講》&#xff0c;所以想從數據和產品角度分析分析拼多多的崛起。 一&#xff1a;拼多多的迅速崛起 我們先看看拼多多這幾年的成長歷程&…

62、滑動窗口的最大值

一、題目 給定一個數組和滑動窗口的大小&#xff0c;找出所有滑動窗口里數值的最大值。例如&#xff0c;如果輸入數組{2,3,4,2,6,2,5,1}及滑動窗口的大小3&#xff0c;那么一共存在6個滑動窗口&#xff0c;他們的最大值分別為{4,4,6,6,6,5}&#xff1b; 針對數組{2,3,4,2,6,2,5…

KestrelServer詳解[2]: 網絡連接是如何創建的?

《KestrelServer詳解[1]&#xff1a;注冊監聽終結點&#xff08;Endpoint&#xff09;》已經詳細講述了如何使用KestrelServer&#xff0c;現在我們來簡單聊聊這種服務器的總體設計和實現原理。當KestrelServer啟動的時候&#xff0c;注冊的每個終結點將轉換成對應的“連接監聽…

PHP操作文件和目錄的相關函數

//判斷文件類型 filetype(a.php);//打開或創建文件 fopen(a.php,w);//讀取文件 fgets(a.php);//按行讀取 fread(a.php,1049);//按塊讀取 file_get_contents(a.php);//讀取文件//復制文件 copy(a.php,./b.php);//將a.php復制到b.php//刪除文件 unlink(b.php);//移動文件 rename(…

linux LyX中文編輯環境安裝配置指南-TeX可視化工具

TeX可以說是國際上排版的標準&#xff0c;尤其是論文、書籍之類&#xff0c;對公式的表現比MS辦公系列強的太多&#xff0c;格式異常優美&#xff0c;但是由于其比較復雜的命令&#xff0c;非可視化編輯&#xff0c;所以使得入門門檻較高&#xff0c;所以出現了LaTeX這樣的命令…

pandas DataFrame 數據處理常用操作

Xgboost調參&#xff1a; https://wuhuhu800.github.io/2018/02/28/XGboost_param_share/ https://blog.csdn.net/hx2017/article/details/78064362 pandas DataFrame中的空值處理&#xff1a; https://blog.csdn.net/yuanxiang01/article/details/78738812 pandas的DataFrame、…

redis集群報Jedis does not support password protected Redis Cluster configurations異常解決辦法...

解決spring-data-redis操作redis集群報“Jedis does not support password protected Redis Cluster configurations”的異常 原因&#xff1a;使用spring-data-redis操作redis集群時由于redis集群設置了密碼。 解決方案&#xff1a;升級spring-data-redis版本即可解決&#xf…

支付寶支付開發流程

支付寶開發流程1、首先我們先談談第三方支付所謂第三方支付就是和一些各大銀行簽約&#xff0c;并具備一定實力和信譽保障的第三方獨立機構提供的交易平臺目前市面上常見的有支付寶&#xff0c;財付通&#xff0c;網銀&#xff0c;易寶支付等&#xff0c;網站需要實現第三方支付…

MQ消息隊列之MSMQ

主要參考文章&#xff1a; 消息隊列&#xff08;Message Queue&#xff09;簡介及其使用 轉載于:https://www.cnblogs.com/mailaidedt/p/6599130.html

css選擇器總結

一.選擇器 1. css1選擇器 2.css2選擇器 3.css3選擇器 4.:nth-of-type(n)和:nth-child(n)區別 (1).在不指定類型時&#xff0c;nth-child(n)選中的是父元素下的第N個子元素。nth-of-type(n)選中的是父元素下的不同類型標簽的第N個。(2).在指定具體元素時,ele:nth-child(n)要求不…

Hypercrx:開源項目不只有Star

01戰隊簡介大家好&#xff0c;我們是Hypercrx戰隊&#xff0c;非常榮幸獲得了首屆Microsoft Edge瀏覽器開拓者大賽的一等獎&#xff01;我是隊長唐燁男&#xff08;中&#xff09;&#xff0c;位于我左側的是寧志成&#xff0c;右側的是林以任&#xff0c;我們都來自華東師范大…

《Python編程快速上手 讓繁瑣工作自動化》pdf

<div id"article_content" class"article_content tracking-ad" data-mod"popu_307" data-dsm"post"> <p><br></p><p>下載地址&#xff1a;<a target"_blank" href"https://page74.c…