修 file 飾符限制頂層型別的可見性僅限於包含其宣告的檔案。
file 修飾詞最常套用至來源產生器所撰寫的類型。 文件內類型為來源產生器提供了一種方便的方法,以避免生成類型之間的名稱衝突。
file 修飾詞會宣告檔案範圍類型,如下列範例所示:
file class HiddenWidget
{
// implementation
}
任何巢狀於檔案本地型別中的型別,也僅在包含該宣告的檔案中可見。 元件中的其他類型可以使用與本機檔案類型相同的名稱。 由於 file-local 型別僅在包含其宣告的檔案中可見,因此這些型別不會產生命名碰撞。
檔案本地型別不能是任何以非檔案本地型別宣告的成員的回傳型別或參數型別。 文件範圍內的類型不能是非文件範圍內的字段成員。 更顯而易見的類型可以隱式實作文件區域介面類型。 型別也可以 明確實作 檔案本機介面,但明確實作只能在相同的檔案內使用。
以下範例顯示一個使用檔案本地類型來提供工作方法的公用類型。 此外,公共類型會隱含地實作檔案區域介面:
// In File1.cs:
file interface IWidget
{
int ProvideAnswer();
}
file class HiddenWidget
{
public int Work() => 42;
}
public class Widget : IWidget
{
public int ProvideAnswer()
{
var worker = new HiddenWidget();
return worker.Work();
}
}
在另一個原始檔案中,您可以宣告與本地類型具有相同名稱的類型。 無法看到檔案本地類型:
// In File2.cs:
// Doesn't conflict with HiddenWidget
// declared in File1.cs
public class HiddenWidget
{
public void RunTask()
{
// omitted
}
}
成員查找時更傾向於選擇在相同檔案中宣告的本地類型,而非在不同檔案中宣告的非本地類型。 此規則可確保來源產生器可以依賴成員查找解析為檔案區域類型,而不會與其他類型宣告產生歧義。 在上述範例中,HiddenWidget 中的所有 用法都會被解析為在 File1.cs中所宣告的檔案本地類型。
HiddenWidget 的 file-local 宣告會在 File2.cs中隱藏公用宣告。
C# 語言規格
欲了解更多資訊,請參閱 C# 語言規範中的宣告無障礙,以及檔案本地類型功能規範。