2011-12-27 7 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#でパフォーマンスが賢明に関係しますか?

内側のクラスも外側のものと同様に継承することができますが、動作のような名前空間は同じです。

「シェイプ」で「パブリック矩形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"); 
+1

ちょうど、このような入れ子のクラスは、ほとんど常に*見つけることが難しくなります。 –

+4

これは確かにプログラマーのパフォーマンスに影響します。 – BoltClock

+0

パフォーマンス上の影響はないと確信していますが、正方形を作成するたびに 'shape.rectangle.square'を書く必要が本当にありますか? – zneak

答えて

6

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"); 

私は思っていましたか?

いいえ、おそらくコンパイル時に数ナノ秒でかまいません。

クラスはネストされた型を許可します。これは、(プライベート) 'ヘルパー'クラスでよく使用され、強く関連するenumです。しかし、それはパフォーマンスではなく、構造と組織に関するものです。

一般に、公開ネストされたクラスは避けるのが最善です。公開列挙型はsligtlyより一般的です。

+0

いくつかの情報をお寄せいただきありがとうございます。 – alan2here

関連する問題