C sharp delegate deki tüm metotları silme, çıkarma

  1. duranasimylmz
    3
    65
    3.07.2019 12:27:00

    Bir delegeye eklediğim tüm metotları nasıl çıkartabilirim, delegeye bir metot ekledim, sonra bir tane daha, ancak bazı durumlarda bu eklediğim metotları tek seferde silmek istiyorum

    örneğin buradaki örnekte olduğu gibi

    https://code.replyfeed.com/sorular/151/c-sharp-delegate-kullanimi

    delegate void ForvetYonet(string name);
    class Forvet
    {
        public static void DefansaGit(string name)
        {
            //---
        }
        public static void HucumaDon(string name)
        {
            //--
        }
        public static void OrtaSahayaGel(string name)
        {
            //--
        }
        static void Main()
        {
            //Delegateleri oluşturmak
            ForvetYonet forvetYonet;
            ForvetYonet defansaGit = new ForvetYonet(DefansaGit);
            ForvetYonet hucumaDon = new ForvetYonet(HucumaDon);
            ForvetYonet ortaSahayaGel = new ForvetYonet(OrtaSahayaGel);
    
            forvetYonet = DefansaGit;
            forvetYonet += HucumaDon;
            forvetYonet += OrtaSahayaGel;
            forvetYonet -= OrtaSahayaGel;
            forvetYonet("Asım");
    
            Console.ReadLine();
        }
    }
    

    bu şekilde metot ekliyoruz

    forvetYonet += HucumaDon;

    bu şekilde de çıkartıyoruz

    forvetYonet -= HucumaDon;

    peki eklediklerimin hepsini tek seferde nasıl çıakrtabiliriz ?

    c# .net 20 gün önce 111 Görüntüleme

( 2 ) Cevap

  1. Snoopy
    2
    11196
    3.07.2019 13:47:00

    Oluşturduğun bir delegate e hangi metotları eklediğini GetInvocationList() metodu ile elde edebilirsin foreach ile her bir metodu aşağıdaki gibi çıkarabilirsin;

     foreach (Delegate delegateItem in forvetYonet.GetInvocationList())
     {
       forvetYonet -= (ForvetYonet)delegateItem;
     }
    

    GetInvocationList() metodunun üzerine gelerek açıklamayı da incelemeni tavsiye ederim, senin Delegate deki metotlar olarak adlandırdığın, Microsoft tarafında Multicast Delegate in invocation listesi olarak geçiyor :)

    c-sharp-delete-all-delegate-invoc-metots

  2. Snoopy
    3
    11196
    3.07.2019 14:33:00

    Bir diğer yöntemde, oldukça basit ve tek satırda ;

    forvetYonet = null;
    

    Örneğin;

    forvetYonet = DefansaGit;
    forvetYonet += HucumaDon;
    forvetYonet += OrtaSahayaGel;
    forvetYonet += OrtaSahayaGel;
    forvetYonet += OrtaSahayaGel;
    forvetYonet += OrtaSahayaGel;
    
    forvetYonet = null;
    
    forvetYonet += OrtaSahayaGel;
    forvetYonet("Cenk");
    

Cevabınız