MQL5'te OOP hakkında sorular - sayfa 60

 
Igor Makanu :

Tekrar merhaba!


böyle bir soru, bir enum var mı, bir enum dizisine veya bir enum listesine veya bir enum konteynerine ihtiyacımız var - şimdi nerede saklanacak bir şey 7 enum , ancak iştah artıyor, muhtemelen 70 enum olacak


nerede ?

ve göreve bağlı olarak bir dizi ve bir liste ve bir kap yapılabilir. Anladığım kadarıyla, büyük olasılıkla kod yazmayı basitleştirmeniz gerekiyor, ardından numaralandırmaları gruplara ayırabilir ve bunları her nesnenin parametreleri için yapılarda birleştirebilirsiniz.

Yürütme aşamasından bahsediyorsak, o zaman normları düşünüyorum. yalnızca değerleri/parametreleri ayarlarken numaralandırma kullanma uygulaması. Ve bunları saklamak için basit bir temel türü kullanın.

 
Aleksey Mavrin :

ve göreve bağlı olarak bir dizi ve bir liste ve bir kap yapılabilir. Anladığım kadarıyla, büyük olasılıkla kod yazmayı basitleştirmeniz gerekiyor, ardından numaralandırmaları gruplara ayırabilir ve bunları her nesnenin parametreleri için yapılarda birleştirebilirsiniz.

Yürütme aşamasından bahsediyorsak, o zaman normları düşünüyorum. yalnızca değerleri/parametreleri ayarlarken numaralandırma kullanma uygulaması. Ve bunları saklamak için basit bir temel türü kullanın.

İlk başta yaptım, bir nedenden dolayı bıraktım, bu tür alanların başlatılmasıyla veya daha doğrusu ME'de enum seçeneklerinin otomatik olarak değiştirilmesiyle ilgili sorunlar var gibi görünüyor, belki de başka bir içermedeki kod .... Bu seçeneği bükeceğim


İnternette dolaştım, Sharpovskoe gibi bir şey istiyorum ... bazı özellikler (((

 public class COrder
    {
         public enum E_MOTION { HIGHER, LOWER, ZIGZAG }
         public enum E_VOLUME { FIXED, INC, DEC }
         public E_MOTION OrderMotionType { get ; set ; }
         public E_VOLUME OrderVolumeType { get ; set ; }
    }

     class Program
    {
         static void Main( string [] args)
        {
             var current = new COrder { OrderMotionType = COrder.E_MOTION.HIGHER, OrderVolumeType = COrder.E_VOLUME.FIXED };
            
        }
    }
 
Igor Makanu :

İlk başta yaptım, bir nedenden dolayı bıraktım, bu tür alanların başlatılmasıyla veya daha doğrusu ME'de enum seçeneklerinin otomatik olarak değiştirilmesiyle ilgili sorunlar var gibi görünüyor, belki de başka bir içermedeki kod .... Bu seçeneği bükeceğim


İnternette dolaştım, Sharpovskoe gibi bir şey istiyorum ... bazı özellikler (((

Sorun ne?

Bire bir ise, o zaman:

 class COrder
{
public :
   enum E_MOTION { HIGHER, LOWER, ZIGZAG };
   enum E_VOLUME { FIXED, INC, DEC };
   E_MOTION orderMotionType;
   E_VOLUME orderVolumeType;
   COrder(E_MOTION _motion, E_VOLUME _volume):orderMotionType(_motion),orderVolumeType(_volume){}
};

void OnStart (){
   COrder* current = new COrder(COrder::HIGHER,COrder::FIXED);
 } 

Bu, numaralandırmaları genel kapsama aktarmak istemiyorsanız geçerlidir.

 
Vladimir Simakov :

Bu, genel kapsamdaki numaralandırmaları çıkarmak istemiyorsanız geçerlidir.

hm...

ve ben bunu böyle yapamadım:

 COrder* current = new COrder(COrder ::HIGHER ,COrder ::FIXED );

Teşekkür ederim!

 

JSON'da basit nesnelerin nasıl kaldırılacağına dair zarif bir çözümü olan var mı?

genel olarak, MQL kapsamında yine böyle bir kod örneğine ihtiyacımız var:

 public class COrder
    {
         public enum E_MOTION { HIGHER, LOWER, ZIGZAG }
         public enum E_VOLUME { FIXED, INC, DEC }

         public bool IsRunning { get ; set ; }
         public int OpenPrice { get ; set ; }
         public int ClosePrice { get ; set ; }
         public E_VOLUME OrderVolumeType { get ; set ; }
         public E_MOTION OrderMotionType { get ; set ; }
        
    }

     class Program
    {
         static void Main( string [] args)
        {
             var current = new COrder {
                IsRunning = false , 
                OpenPrice = 1200 ,
                ClosePrice = 1300 ,
                OrderMotionType = COrder.E_MOTION.ZIGZAG, 
                OrderVolumeType = COrder.E_VOLUME.FIXED };

             string json = JsonSerializer.Serialize<COrder>(current);
            Console.WriteLine(json);
            Console.ReadLine();
        }
    }

{"IsRunning":false,"OpenPrice":1200,"ClosePrice":1300,"OrderVolumeType":0,"OrderMotionType":2}

MQL için serileştirici https://www.mql5.com/en/code/13663

ancak nesne alanlarının doğru baypas yapısını temsil etmiyorum

 
Igor Makanu :

ancak nesne alanlarının doğru baypas yapısını temsil etmiyorum

Makrolar her şeydir
 
Alexey Navoykov :
Makrolar her şeydir

uh... sormaya çalışacağım:

örnek almak için yardım edin! lütfen!

 
Igor Makanu :

uh-huh... Bunu bir kez daha sormaya çalışacağım:

örnek almak için yardım edin! lütfen!

Peki, soru özellikle alanları atlamakla ilgiliyse, bunun gibi bir şey:

 #define SERIALIZE5(object, m1, m2, m3, m4, m5)   /* your code */

...

SERIALIZE5(current, IsRunning, OpenPrice, ClosePrice, OrderVolumeType, OrderMotionType);

Ve makronun gövdesiyle kendiniz anlayacaksınız)

 
Alexey Navoykov :

Peki, soru özellikle alanları atlamakla ilgiliyse, bunun gibi bir şey:

Ve makronun gövdesiyle kendiniz anlayacaksınız)

Tamam, en azından bir şey

Teşekkür ederim!

 
Öte yandan, serileştirme için metin alanı adlarını açıkça ayarlamak muhtemelen daha iyidir. Böylece daha sonra kaydedilen dosyaların çalışmayı durduracağından korkmadan bunları kodda özgürce yeniden adlandırabilirsiniz.