public class shape
{
public int x, y;
public class triangle
{
int sides = 3;
}
public rectangle rect = new rectangle();
public class rectangle
{
int sides = 4;
public class square
{
public string s;
}
}
}
shape a = new shape();
a.x = 4;
a.y = 3;
//print(a.triangle.sides) //no such thing
//print(a.rect.sides) //prints 4
shape.rectangle.square d = new shape.rectangle.square();
d.s = "abc";
Это несколько произвольный пример, но он показывает использование вложенных определений классов в C # для работы как пространства имен.
Внутренние классы также могут наследовать от внешних и тому подобных, но поведение, подобное пространству имен, одинаково.
За исключением случаев, когда я сделал это в "shape" с "public rectangle rect = new rectangle ();" внутренние классы не являются частью внешних. Это больше похоже на то, что у них просто есть одинаковые имена, например, их можно разложить и перефразировать с помощью подчеркивания "shape_rectangle_square d = new shape_rectangle_square ();".
Мне было интересно, есть ли какие-либо соображения по поводу производительности, например, в этих ситуациях.
shape.triangle t = new shape.triangle();
List<shape.triangle> triangles = new List<shape.triangle>();
triangles.Add(new shape.triangle());
foreach (shape.triangle t in triangles)
func(new shape.triangle(1, 2, 3), "ted");
против
shape_triangle t = new shape_triangle();
List<shape_triangle> triangles = new List<shape_triangle>();
triangles.Add(new shape_triangle());
foreach (shape_triangle t in triangles)
func(new shape_triangle(1, 2, 3), "ted");