Много ли пространства имен, например, вложенности классов, влияет на производительность в C #? - PullRequest
2 голосов
/ 27 декабря 2011
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");

1 Ответ

7 голосов
/ 27 декабря 2011

Мне было интересно, были ли какие-либо соображения по поводу производительности?

Нет.Возможно, это может иметь значение в несколько наносекунд во время компиляции.

Класс допускает вложенные типы.Это иногда используется для (частных) вспомогательных классов и сильно связанных enum s.Но речь идет о структуре и организации, а не о производительности.

Как правило, лучше избегать публичных вложенных классов.Публичные списки чуть более распространены.

...