Thursday, April 25, 2019

ஈவண்ட்ஸ் மற்றும் டெலிகேட்ஸ்





டெலிகேட்ஸ்

டெலிகேட்ஸ் என்பது ஃபங்க்சன் பாயிண்டர் ஆகும்.டெலிகேட்ஸ்  என்பது ஒரு மெத்தடின் சார்பாக செயற்படுகின்றது.

கீழே ஒரு சிறிய கன்சோல் பயன்பாடு  உருவாக்கபாட்டுள்ளது. ஒரு  பயனர் ரிஜிஸ்டர் ஆகும் பொழுது ஒரு இமெயில் மற்றும் sms வெரிஃபிகேசன் அனுப்பப்படுகின்றது.

class Program {  

    static void Main() {  

        var registerUser = new RegisterUser();  

        var emailVerification = new EmailVerification();  

        var smsVerification = new SMSVerification();  

        registerUser.registerUserDelegateInstance += emailVerification.OnUserRegistered;  

        registerUser.registerUserDelegateInstance += smsVerification.OnUserRegistered;  

        registerUser.RegisterAUser(); // Call delegate  

        Console.ReadLine();  

    }  

}  

public class RegisterUser {  

    public delegate void registerUserDelegate(); // declare a delegate  

    public registerUserDelegate registerUserDelegateInstance; // create a delegate instance  

    public void RegisterAUser() {  

        Console.WriteLine("User registered");  

        if (registerUserDelegateInstance != null) {  

            registerUserDelegateInstance(); // Call the delegate  

        }  

    }  

}  

public class EmailVerification {  

    public void OnUserRegistered() {  

        Console.WriteLine("Sent Email for Verification");  

    }  

}  

public class SMSVerification {  

    public void OnUserRegistered() {  

        Console.WriteLine("Sent SMS for Verification");  

    }  

}   

மேலே உள்ள நிரலில் ஒரு  டெலிகேட் சிக்னேச்சர் (registerUserDelegate )அறிவிக்கப்பட்டுள்ளது.எந்த  வித பராமீட்டர் ஏற்காத  மற்றும் எதையும் ரிடர்ன் செய்யாத மெத்தடை இது பாயின்ட் செய்யலாம். அதாவது ஒரு டெலிகேட் ஆனது அதன் சிக்னேச்சர்   உள்ள மெத்தடை மற்றும் உள்ள மெத்தடை  மற்றுமே பாயிண்ட் செய்யலாம்.

ஒரு டெலிகேட்ஸ் இன்ஸ்டன்ஸ் உருவாக்கப்பட்டுள்ளது.(‘registerUserDelegateInstance‘)இது  OnUserRegistered  -ன் EmailVerification & SMSVerification classs மெத்தட்களை பாயிண்ட் செய்கின்றது டெலிகேட் இன்ஸ்டன்ஸ் RegisterAUser –ல் அழைக்கப்படும் பொழுது அது பாயிண்ட் செய்யும் மெத்தட்கள் இயக்கப்படுகின்றது.

வெளியீடு:




Advantages of using Delegates

  • LINQ ஆனது Func & Action டெலிகேட்ஸ்களை பயன்படுத்துகின்றது
  • ஈவண்ட்ஸ் என்பது என்கேப்சுலேட் செய்யப்பட்ட டெலிகேட்ஸ்களே  ஆகும்

மெத்தட்களை மற்ற மெத்தட்களுக்கு பராமீட்டர்களாக  அனுப்ப இயலாது ஆனால் ஒரு டெலிகேட்ஸை ஒரு மெத்தட் பராமீட்டராக  அனுப்பலாம்.

டெலிகேட்ஸ் ஆனது coupling –ஐ குறைக்கப்பயன்படுகின்றது.

அட்ரஸ்  வெரிஃபிகேசன் சேர்க்க வேண்டுமென்றால் அதற்காக ஒரு கிளாஸ் உருவாக்கி அதில் உள்ள மெத்தடை இந்த டெலிகேட் பாயிண்ட் செய்தால் போதும்.

Disadvantages of using Delegates

ஒரு டெலிகேட்ஸ் இன்ஸ்டன்ஸை கீழ் வருமாறு  நல் ஆக்கலாம்.

1.   registerUser.registerUserDelegateInstance = null;  



வெளியீடு:




 email verification மற்றும் SMS verification  மெத்தட்கள் அழைக்கப்படாது ஏனெனில் டெலிகேட்ஸ் நல் ஆக்கபட்டுள்ளது

இந்த குறைப்பாட்டை ஈவன்ட்ஸ் எவ்வாறு சரி செய்கின்றது எனப் பார்ப்போம்.

Events

இப்பொழுது ஈவன்ட்கள் எவ்வாறு டெலிகேட்ஸை கேப்சுலேட் செய்கின்றது என்று பார்ப்போம் .



class Program {  

    static void Main() {  

        var registerUser = new RegisterUser();  

        var emailVerification = new EmailVerification();  

        var smsVerification = new SMSVerification();  

        registerUser.registerUserEvent += emailVerification.OnUserRegistered; //subscribe to an event  

        registerUser.registerUserEvent += smsVerification.OnUserRegistered; //subscribe to an event  

        registerUser.RegisterAUser(); // publisher  

        Console.ReadLine();  

    }  

}  

public class RegisterUser {  

    public delegate void registerUserEventHandler(object source, EventArgs Args); //define a delegate  

    public event registerUserEventHandler registerUserEvent; // define an event  

    public void RegisterAUser() {  

        Console.WriteLine("User registered");  

        if (registerUserEvent != null) {  

            registerUserEvent(this, EventArgs.Empty); // call event  

        }  

    }  

}  

public class EmailVerification {  

    public void OnUserRegistered(object source, EventArgs e) {  

        Console.WriteLine("Sent Email for Verification");  

    }  

}  

public class SMSVerification {  

    public void OnUserRegistered(object source, EventArgs e) {  

        Console.WriteLine("Sent SMS for Verification");  

    }  


என்னிடம் ‘RegisterUser’ என்ற கிளாஸ் உள்ளது. இதில் ‘registerUserEventHandler’ என்ற  டெலிகேட் உள்ளது. இந்த டெலிகேட்டை அடிப்படையாகக் கொண்டு ‘registerUserEvent’. என்ற  ஈவண்டை உருவாக்கியுள்ளோம்.இப்
பொழுது ஒரு பயனர் ரிஜிஸ்டர் ஆகும் பொழுது இந்த ஈவண்ட் அழைக்கப்படுகின்றது.
EmailVerification என்ற கிளாஸ் உருவாக்கி அதில் ‘OnUserRegistered’ என்ற மெத்தட் உள்ளது இது ஈவன்ட் அனுப்பும் பராமீட்டர்களை ஏற்கின்றது

மெயின் கிளாசில்  EmailVerification & SMSVerification ஆகியவை ஈவண்டிற்கு  சப்ஸ்கிரைப் செய்கின்றது.

வெளியீடு:


படிகள்

1.   delegate அறிவிக்கவும் (registerUserEventHandler)

2.   அதை  அடிப்ப்டையாகக் கொண்டு ஒரு ஈவண்டை அறிவிக்கவும். (registerUserEvent)

3.   ஈவண்டை உருவாக்கவும் (registerUserEvent(this, EventArgs.Empty);)

4.   அந்த ஈவண்டிற்க்கு மெத்தட்களை சப்ஸ்கிரைப் செய்யவும். (registerUser.registerUserEvent += emailVerification.OnUserRegistered;)

5.   ஈவண்டை ஃபையர்  செய்யவும். (RegisterAUser)

ஒவ்வொரு தடவை ஈவண்ட் அறிவிக்கும் பொழுது ஒரு டெலிகேட்டை அறிவிக்க  தேவையில்லை.டாட்னெட் ஆனது EventHandler என்ற டெலிகேட்டை இன்பில்ட் ஆக கொண்டுள்ளது. அதை  ஈவண்டை அழைக்கும் பொழுது  நேரடியாக பயன்படுத்தலாம்.



 public event EventHandler registerUserEvent;  

class Program  

    {  

   

        static void Main()  

        {  

            var registerUser = new RegisterUser();  

            var emailVerification = new EmailVerification();  

            var smsVerification = new SMSVerification();  

   

            registerUser.registerUserEvent += emailVerification.OnUserRegistered; //subscribe to an event  

            registerUser.registerUserEvent += smsVerification.OnUserRegistered; //subscribe to an event  

            registerUser.RegisterAUser(); // publisher  

   

   

            Console.ReadLine();  

        }  

   

    }  

   

   

    public class RegisterUser  

    {  

        public event EventHandler registerUserEvent;  

        public void RegisterAUser()  

        {  

            Console.WriteLine("User registered");  

            if (registerUserEvent != null)  

            {  

                registerUserEvent(this, EventArgs.Empty);// call event  

            }  

        }  

   

    }  

    public class EmailVerification  

    {  

   

        public void OnUserRegistered(object source, EventArgs e)  

        {  

            Console.WriteLine("Sent Email for Verification");  

        }  

    }  

   

    public class SMSVerification  

    {  

   

        public void OnUserRegistered(object source, EventArgs e)  

        {  

            Console.WriteLine("Sent SMS for Verification");  

        }  

    }  

நாம் ஒரு ஈவண்டை நல் ஆக்க இயலாது.

ஆதலால் ஒரு ஈவண்ட் என்பது என்கேப்சுலேட்  செய்யப்பட்ட டெலிகேட்டுகளாகும். இது மேலும் பாதுகாப்பை தருகின்றது எனவே தான் நாம் டெலிகேட்டுகளை விட ஈவண்டுக்ளை  பயன்படுத்துகின்றோம்.

நன்றி

முத்து கார்த்திகேயன், மதுரை.







ads Udanz

No comments:

Post a Comment