SORU
17 Ocak 2009, CUMARTESİ


C özel iç dersleri# - neden değil't daha sık kullandılar?

C nispeten yeni duyuyorum# ve her zaman bir C üzerinde çalışmaya başlarım# proje (sadece C neredeyse olgun projeler üzerinde çalıştı#) iç sınıflar yok neden acaba?

Belki de onların amacı anlamıyorum. Beni, iç sınıflar -- en azından özel iç sınıflar -- bak bir sürü gibi "iç prosedürleri" Pascal / Modula-2 / Ada : izin, yıkmak için bir ana sınıfında küçük parçalar için kolay anlayış.

Örnek : burada çoğu zaman görüldüğü gibidir :

public class ClassA
{
   public MethodA()
   {
      <some code>
      myObjectClassB.DoSomething(); // ClassB is only used by ClassA
      <some code>
   }
}

public class ClassB
{
   public DoSomething()
   {
   }
}

ClassB kullanılan (en azından bir süre için) ClassA tek tarafından yapılacağı için, benim tahminim bu kodu aşağıdaki gibi ifade olurdu

   public class ClassA
   {
      public MethodA()
      {
         <some code>
         myObjectClassB.DoSomething(); // Class B is only usable by ClassA
         <some code>
      }

      private class ClassB
      {
         public DoSomething()
         {
         }
      }
   }

Bu konuda haklı Mıyım? sizden duymak çok sevinirim

Şimdiden teşekkürler!

CEVAP
17 Ocak 2009, CUMARTESİ


Sınıflar (muhtemelen en iyi kelime önlemek için "," C olarak iç içe geçmiş sınıflar# Java sınıfları iç) biraz farklı iç gerçekten çok yararlı olabilir. iç içe

Sözü edilmemiş bir örüntü, "Java: bir daha esnek olabilir desen . numaralama" daha iyidir

public class MyCleverEnum
{
    public static readonly MyCleverEnum First = new FirstCleverEnum();
    public static readonly MyCleverEnum Second = new SecondCleverEnum();

    // Can only be called by this type *and nested types*
    private MyCleverEnum()
    {
    }

    public abstract void SomeMethod();
    public abstract void AnotherMethod();

    private class FirstCleverEnum : MyCleverEnum
    {
        public override void SomeMethod()
        {
             // First-specific behaviour here
        }

        public override void AnotherMethod()
        {
             // First-specific behaviour here
        }
    }

    private class SecondCleverEnum : MyCleverEnum
    {
        public override void SomeMethod()
        {
             // Second-specific behaviour here
        }

        public override void AnotherMethod()
        {
             // Second-specific behaviour here
        }
    }
}

Biz de bazı dil desteği için biraz bu otomatik olarak - ve orada bir sürü seçenek görmedim gösterildiği gibi değil aslında kullanarak iç içe geçmiş bir sınıf için tüm değerleri, ya da kullanarak aynı iç içe geçmiş bir sınıf için birden fazla değer veren ama onları farklı oluşturucu parametreleri. Ama temelde, iç içe geçmiş sınıfı özel kurucusunu çağırmak aslında güç bir sürü verir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Edge-CGI 3D Tutorials and more!

    Edge-CGI 3D

    11 HAZİRAN 2013
  • glowpinkstah

    glowpinkstah

    16 Mayıs 2006
  • TopOfTheTech

    TopOfTheTech

    5 NİSAN 2010