在C#中,公共嵌套类和私有嵌套类之间有什么区别?你什么时候用另一个经文?
据我所知,他们在类的视图中具有相同的可访问性,它们嵌套在任何外部类中.
void Main()
{
Item i = new Item();
i.DoSomething();
GizmoBuilder gb = new GizmoBuilder();//class not accessible
WidgetBuilder wb = new WidgetBuilder();//class not accessible
}
public class Item
{
public int Id { get; set; }
private string ItemName { get; set;}
public void DoSomething()
{
GizmoBuilder g = new GizmoBuilder();
g.BuildGizmo();
Console.WriteLine(g.BuildId);
Console.WriteLine(g.Name);//g.Name not accessible
WidgetBuilder w = new WidgetBuilder();
w.BuildWidget();
Console.WriteLine(w.BuildId);
Console.WriteLine(w.Name);//g.Name not accessible
}
public class GizmoBuilder
{
public int BuildId { get; set; }
private string Name { get; set;}
public void BuildGizmo()
{
Builder b = new Builder();
b.Build();
Console.WriteLine("Building Gizmo");
}
}
private class WidgetBuilder
{
public int BuildId { get; set; }
private string Name { get; set;}
public void BuildWidget()
{
Builder b = new Builder();
b.Build();
Console.WriteLine("Building Widget");
}
}
private class Builder
{
public void Build()
{
Console.WriteLine("Building");
}
}
}
Run Code Online (Sandbox Code Playgroud)
一个简化的例子:
public class Foo
{
public class Bar { }
private class Baz { }
}
Run Code Online (Sandbox Code Playgroud)
使用它们:
var bar = new Bar();
var nestedBar = new Foo.Bar();
var nestedBaz = new Foo.Baz();
Run Code Online (Sandbox Code Playgroud)
在GizmoBuilder gb = new GizmoBuilder()你宣称"类[是]无法访问",但这是不正确.属于上述三行第一行的实际编译器错误是:
CS0246:找不到类型或命名空间名称"Bar".你错过了装配参考吗?
那是因为你必须在包含类的名称前加上前缀,如第二行所示.这是有效的,因为Foo.Bar是公开的.
访问私有嵌套类的第三行显示:
CS0122:由于其保护级别,"Foo.Baz"无法访问
所以这是你的不同之处.你只能Foo.Baz从里面使用后者()Foo.
| 归档时间: |
|
| 查看次数: |
238 次 |
| 最近记录: |