C#11 添加了文件作用域类型功能:一个新的 file 修饰符,可以应用于任何类型定义以限制其只能在当前文件中使用。这样,我们可以在一个项目中拥有多个同名的类。
通过下面的项目显示,该项目包含两个名为Answer的类。
文件File1.cs中
namespace ConsoleApp11
{
file static class Answer
{
internal static string GetFileScopeScret() => "File1.cs";
}
static class InternalClassFromFile1
{
internal static string GetString() => Answer.GetFileScopeScret();
}
}
文件File2.cs中
namespace ConsoleApp11
{
file static class Answer
{
internal static string GetFileScopeScret() => "File2.cs";
}
static class InternalClassFromFile2
{
internal static string GetString() => Answer.GetFileScopeScret();
}
}
调用这两个方法,可以正常输出
static void Main(string[] args)
{
Console.WriteLine(InternalClassFromFile1.GetString());
Console.WriteLine(InternalClassFromFile2.GetString());
}
这里有几点说明:
修改File.cs中代码
namespace ConsoleApp11
{
file class Answer : IAnswer
{
public string GetFileScopeSecret() => "File1.cs";
}
internal interface IAnswer
{
string GetFileScopeSecret();
}
static class InternalClassFromFile1
{
internal static IAnswer GetAnswer() => new Answer();
}
}
调用方法,即可正常输出
static void Main(string[] args)
{
Console.WriteLine(InternalClassFromFile1.GetAnswer().GetFileScopeSecret());
}
namespace ConsoleApp1 {
file static partial class Answer {
internal static string GetFileScopeSecret()
=> "Answer from File1.cs";
}
file static partial class Answer {
internal static string AnotherGetFileScopeSecret()
=> "Another Answer from File1.cs";
}
}
让我们强调一下,namespace仍然是避免类型名称冲突的首选方法。