2014-05-02 25 views
14

Yöntemler içeren bir liste oluşturmaya çalışıyorum ve bunları uygulamak istediğim bazı yöntemleri ekledikten sonra, bu mümkün mü? SonraYöntemler listesi nasıl oluşturulur ve sonra yürütülür?

List<object> methods = new List<object>(); 

:

Böyle bir şey denedik

methods.Add(Move()); 

Ama eklediğinizde, program Move();

çağrısında bu durumda, örneğin, yöntemleri arayacak

cevap

20

Bu Action jenerik temsilci için büyük kullanıldığı durumdur. Parametreleri gerekiyorsa

List<Action> functions = new List<Action>(); 
functions.Add(Move); 

foreach (Action func in functions) 
    func(); 

, ben soyut onlara lambdas uzakta kullanırsınız:

List<Action> functions = new List<Action>(); 
functions.Add(Move); 
functions.Add(() => MoveTo(1, 5)); 

foreach (Action func in functions) 
    func(); 

bir temsilci C++ dan işlev işaretçileri ile benzerlik göstermektedir, bu bir fonksiyonu (bir dönüş değil "" ne tutar örneğinizdeki değer gibi), böylece normal bir işlev gibi onu arayabilirsiniz. Eylem genel temsilci hiçbir parametre almaz ve hiçbir şey döndürmez, bu nedenle genel "bu işlevleri çağır" için idealdir. Eylem

MSDN: İlginiz için Action Delegate

+0

Teşekkür !! Onun çalışma şimdi (ince: – user3491915

+0

'gerekli bir' listesi yapma basitçe Eylem yourFunction 'tanımlayan gibi görünüyor mı;' ve ekleme? Bunun için metodlar, + = 'ile çalışır, bu şekilde 'yourFunction + = DoThis; yourFunction + = DoThat;'. Sadece düşüş, bunun dahili olarak nasıl yineleneceğinden emin değilim, bu yüzden kontrol seviyesine ihtiyacınız varsa Bir Liste daha uygun olabilir – bigp

+0

@bigp Bunu yapmak için tüm delegeler çok noktaya yayınlıdır, ben kişisel olarak burada açık olmayı severim, eğer kullanmak istersem + = sadece bir olayı kullanacağım, dediğin gibi, onun temel olarak bir stili. bir şey olsa – BradleyDotNET

1

Delegeleri kullanabilirsiniz. Delegelerin bir listesini oluşturun. Ardından, listeye eklemek istediğiniz her yöntem için bir temsilci oluşturun ve listeye ekleyin.

List<Delegate> methods = new List<Delegate>(); 

// creates an Action delegate implicitly 
methods.Add((Action)Move); 
+0

Teşekkürler (: – user3491915

İlgili konular