2011-12-27 48 views
1
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#中嵌套類定義的使用像命名空間一樣工作。類似嵌套的命名空間在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"); 

VS

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

只需觀察一下,像這樣嵌套的類幾乎*總是*使事情更難找到。 – 2011-12-27 00:24:04

+4

這肯定會影響程序員的表現。 – BoltClock 2011-12-27 00:24:41

+0

我確信沒有性能方面的影響,但是您是否真的想每次創建一個正方形時都必須編寫'shape.rectangle.square'? – zneak 2011-12-27 00:26:32

回答

6

我想知道是否有任何性能方面的考慮到這一點?

不,在編譯時它可能會影響幾個納秒。

一個類允許嵌套類型。這有時用於(私人)'助手'班,並強烈關聯enum s。但它是關於結構和組織,而不是關於表現。

一般來說,最好避免使用公共嵌套類。公共枚舉比較普遍。

+0

感謝您提供一些信息。 – alan2here 2011-12-27 00:37:45