【问题标题】:Does lots of namespace like nesting of classes matter performance wise in C#?在 C# 中,像嵌套类这样的命名空间是否对性能很重要?
【发布时间】:2012-01-28 05:38:21
【问题描述】:
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# 中使用嵌套类定义来像命名空间一样工作。

内部类也可以从外部类继承,但是类似命名空间的行为是一样的。

除了我用“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");

【问题讨论】:

  • 只是一个观察,像这样的嵌套类几乎总是让事情更难找到。
  • 肯定会影响程序员的性能。
  • 我很确定这不会对性能产生影响,但是您真的希望每次创建正方形时都必须写 shape.rectangle.square 吗?
  • 框架设计指南禁止这样:“不要使用公共嵌套类型作为逻辑分组结构;为此使用命名空间。” (msdn.microsoft.com/en-us/library/ms229027.aspx)
  • @alan2here:Framework/BCL 命名空间和类型是完全不同的东西......

标签: c# class object namespaces nested


【解决方案1】:

我想知道这是否有任何性能方面的考虑?

没有。编译时间可能需要几纳秒。

一个类允许嵌套类型。这有时用于(私有)“助手”类和密切相关的enums。但它是关于结构和组织,而不是关于性能。

一般来说,最好避免使用公共嵌套类。公共枚举更常见。

【讨论】:

  • 感谢您提供一些信息。
猜你喜欢
  • 2018-11-26
  • 1970-01-01
  • 2011-03-13
  • 1970-01-01
  • 2015-02-17
  • 2021-12-23
  • 2016-05-02
  • 1970-01-01
相关资源
最近更新 更多