public class Class1
{
temp _temp ;
public Class1()
{
_temp = new temp();
}
public void SetTempClass(string p_str, int p_Int)
{
_temp.setVar(p_str, p_Int);
}
public string GetTempClassStr()
{
return _temp.GetStr();
}
public int GetTempClassInt()
{
return _temp.GetInt();
}
private class temp
{
string str;
int i;
public void setVar(string p_str, int p_int)
{
str = p_str;
i = p_int;
}
public string GetStr()
{
return str;
}
public int GetInt()
{
return i;
}
}
}
// file1.cs
namespace Test;
file class Foo {}
class FooFactory
{
public static object CreateFoo() => new Foo();
}
在另一个文件中,您不能通过名称Foo引用类型:
// file2.cs
using System;
namespace Test;
class Program
{
public static void Main()
{
// Prints something like:
// "Test.<file1>EF2345065A04F90B2A4EE01E86C4DF23B0AF1B96D7D3F7CC9046D1F1C5EADFB80__Foo"
Console.WriteLine(FooFactory.CreateFoo());
// Does not compile with error:
// "The type or namespace name 'Foo' could not be found"
new Foo();
}
}
6条答案
按热度按时间mcdcgff01#
简单地说没有。除非它在嵌套类中,否则什么都没有
您可以使用InternalsVisibleToAttribute使特定的其他程序集能够访问您的内部类型。
pkwftd7m2#
不,没有。除非是嵌套的,否则不能有私有类。
eblbsuwk3#
在什么情况下,那么对于一个内部类,你想有一个“私人”类?
可以使用
internal
修饰符创建仅在当前程序集中可见的类。lnxxn5zx4#
不。这样一个类的作用域是什么?
ajsxfq5m5#
我们可以在其他类中将一个类声明为Private。请在下面的代码中找到如何实现相同的目标:
xcitsw886#
C# 11添加了file-local types。带有
file
访问修饰符的类型只能在声明它们的源文件中使用。例如,您可以在一个文件中声明文件本地类
Foo
:在另一个文件中,您不能通过名称
Foo
引用类型:从这个例子中可以看出,C#编译器在编译时给每个文件本地类一个唯一的名字。这允许多个文件定义一个同名的文件本地类,并且在运行时不会相互干扰。