Solved

pass function names?

Posted on 2015-01-17
4
93 Views
Last Modified: 2015-01-20
void QuestionControlPayForDiapers_nextclicked(object sender, EventArgs e)
        {
            ShowNameCityPayDiapersPage(false);

            if (QuestionControlPayForDiapers.DropDownText == "Yes")
            {
                ShowDiaperSizesPage(true);
            }
            else
            {
                ShowChuxWipesPage(true);
            }           
        }

Open in new window


I want to turn the method above into a more generic version that I can use over and over, passing in names of methods to call and/or names of controls:

void QuestionControlPayForDiapers_nextclicked(object sender, EventArgs e)
        {
             ProcessNextButtonClick(ShowNameCityPayDiapers, QuestionControlPayForDiapers, ShowDiaperSizesPage, ShowChuxWipesPage);
 }

            
void ProcessNextButtonClick(function hidegroup, QuestionControl dropdownquestioncontrol, function showyesgroup, function shownogroup)
        {
            hidegroup(false);

            if (dropdownquestioncontrol.DropDownText == "Yes")
            {
                showyesgroup(true);
            }
            else
            {
                shownogroup(true);
            }           
        }

Open in new window




Update:  So far my own research seems to indicate that using "delegates" may provide the answer.


In any case -- I could still use some examples .. some working code that does what I have asked.  Thanks!
0
Comment
Question by:knowlton
4 Comments
 
LVL 35

Assisted Solution

by:Miguel Oz
Miguel Oz earned 50 total points
ID: 40555647
Delegates could be one way to go as shown here, but it forces to create one delegate for every method signature.
if you are using .NET 3.5+ and your methods return a value, there is a nice alternative that uses Func type and allows  a more generic solution.
0
 
LVL 74

Accepted Solution

by:
käµfm³d   👽 earned 400 total points
ID: 40555804
...but it forces to create one delegate for every method signature.
I mean, you could, but you don't have to. You can use the built-in Action and Func delegates as appropriate. Using delegates is a great way to reuse the same algorithm, but change it's internal behavior. That seems to be more or less what you are talking about here, though I would caution you to not do this just for the sake of having shorter code. Using delegates should have a programmatic goal. The use of delegates, if done incorrectly, can make your code harder to follow.
0
 
LVL 11

Assisted Solution

by:louisfr
louisfr earned 50 total points
ID: 40555831
To use delegates is trivial. Just replace the "function" in your sample with "Func<bool>" and it should work.
void ProcessNextButtonClick(Func<bool> hidegroup, QuestionControl dropdownquestioncontrol, Func<bool> showyesgroup, Func<bool> shownogroup)

Open in new window

The rest of your sample looks ok.
0
 
LVL 5

Author Closing Comment

by:knowlton
ID: 40560581
Thanks everyone!

Yeah - it was delegates I was after.

I'd used them before, but only in a strictly "Observer" type scenario where a control generates and event that a parent (webform) consumes.
0

Featured Post

Threat Intelligence Starter Resources

Integrating threat intelligence can be challenging, and not all companies are ready. These resources can help you build awareness and prepare for defense.

Join & Write a Comment

Just a quick little trick I learned recently.  Now that I'm using jQuery with abandon in my asp.net applications, I have grown tired of the following syntax:      (CODE) I suppose it just offends my sense of decency to put inline VBScript on a…
IntroductionWhile developing web applications, a single page might contain many regions and each region might contain many number of controls with the capability to perform  postback. Many times you might need to perform some action on an ASP.NET po…
It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring. It works on many operating systems, in many languages.
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…

707 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now