Solved

pass function names?

Posted on 2015-01-17
4
98 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 75

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

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

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…
A quick way to get a menu to work on our website, is using the Menu control and assign it to a web.sitemap using SiteMapDataSource. Example of web.sitemap file: (CODE) Sample code to add to the page menu: (CODE) Running the application, we wi…

828 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