Dynamically Change The Function Of A Delegate In .NET?
Jun 18, 2009
Suppose I have a class that represents a product to be priced using one of a number of different pricing strategies. This pricing occurs hundreds of times per second, so to eliminate repetitive if/else statements I am instead using a delegate to launch the appropriate strategy, like so:
Private Delegate Sub PricingModel(ByVal params As PricingParameters)
Private myPricingModel As PricingModel
Private myPricingParameters As PricingParameters[code].....
But this doesn't look right to me (though it seems to work). Is there an accepted/better way of doing this? Or is this the standard way? Or is this just simply a doomed approach from the start?
I have one master page and then content page on the master page and also have one UC on the master page, now i want to filter data from usercontrol on and populate on content page using delegate.
I have achieved this in C# but i am not able to do this in VB.NET
Because in VB.NET i am not able to overload event of the uc.
I need to convert the following C# code to VB.NET:
public bool TryGetRewriteMatch(UrlContext url, out RedirectMatch match) { // NOTE: Normally this would use regular expression matches, cached database
[Code].....
However, I need to reference Url and ProductID in the function and I don't know how to pass them as parameters or get their values from the original function.
I have a function Process(data, f) where data is a normal parameter and f is a function needed to process the data (passed as a delegate to Process)
The signature of f is int f(a,b,c), with a, b, c supplied by Process when it calls the delegate.
Up until here, standard delegate usage.
Now, I have a special but common case where I would like to call Process with a constant f function. So I would like to write SimpleProcess(data, k) so that the caller does not need to create a delegate in this case, just pass the constant k (the only information needed).
So I need to dynamically create a constant function, g(a,b,c) which takes 3 parameters (which are ignored) and always returns k. This has to be done within the SimpleProcess function, so that I can then simply call Process(data, g) from within that function, without the need to rewrite the whole Process function for this special case.
I am exposing some ISO C++ data types to .Net (mono on Linux to be precise).For the purpose of brevity, I shall refer to C# in my question, although my question relates to all of the .Net languages (with C# and VB.Net being my target languages). So far, I have worked out how to expose the ISO C++ data types in C# class(es) for use in mono -The only problem so far is how to deal with the C++ callbacks. In .Net languages (C# and Vb.Net), I believe 'delegates' are the callback equivalent.
Sticking with C# for now, can anyone recommend a way that I can register the C# delegate functions with my ISO C++ code.The ISO C++ code is a notification library, and I want to be able to "push" the notifications to the mono framework (i.e. C# delegates in this case).My underlying assumption is that the mechanism/steps to implement this would be the same for the .Net languages - I'll just have to code the actual delegates in the .Net language of choice - is that assumption correct?Last but not the least, is the question of thread saftey. The underlying ISO C++ code that I am exposing to .Net (mono to be more specific), is both re-ntrant and thread safe - do I have to do anything "extra" to call .Net delegate from my ISO C++ code?
from the documentation we have this: Multicast Delegate: Represents a multicast delegate; that is, a delegate that can have more than one element in its invocation list.
so am i right to say that Multicast delegate is no different from a normal delegate other than the fact that it has arguments. so System.Action is a 'normal' delegate whereas System.Action(T)(Byval obj as T) is a multicast delegate?
For a class, I have to create a delegate and use the function in my program called DoStuff(). There is an error tht says "Method 'Public Sub DoStuff(stringVal As String)' does not have a signature compatible with delegate 'Delegate Sub MyDel()'.
I wrote a serializer (to Byte Array) for dictionaries that have a string key, but an object of some sort as its value.I've never implemented a generic type in a function or used a delegate before, so I'm a bit concerned about this being significantly slower than writing a serialization function for a specific type of Dictionary (Dictionary(Of String, MyClass) for example)Should this code be significantly slower due to the use of the generic type or the delegate?
[code]...
It works, and I could loop it and compare it to a more static Dictionary serializer, but I'm more concerned about when I start using this for a lot of different String/Object dictionary combinations, and it'll take me a long time to write a bunch of static dictionary serializers (that's what I'm hoping to avoid in the first place)edit: simplified intro text
There are so many of these, that I'm getting tired of looking at these lines so I want to curry the references to the Excel stuff.I tried:
Dim DelCol As Func(Of Integer) = Function(col As Integer) _ objrpt.objXLSheet.Columns(col) _ .EntireColumn.Delete(Excel.XlDeleteShiftDirection.xlShiftToLeft)
but that won't compile, giving me the error: "Nested function does not have the same signature as delegate 'System.Func(Of Integer)'. Ah forget it. I see that I'm trying to call a method from a function. I guess that won't work.Wait, I'm now trying it another way. I first defined a function:
Private Function DeleteColumn(ByRef objrpt As ExcelReport, ByVal col As Integer) As Object DeleteColumn = Nothing Dim objrng As Excel.Range
[code]....
Now the error message is a little different:
"Nested function does not have the same signature as delegate 'System.Func(Of Object)'.
Code: Public Class SendPings Shared Sub New() AddHandler Post.Saved, AddressOf Post_Saved[code].....
I get a error" Method 'Private Shared Sub Ping(item As BlogEngine.Core.IPublishable, itemUrl As System.Uri)' does not have a signature compatible with delegate 'Delegate Sub WaitCallback(state As Object)'.
D is a dictionary whose entry values are of Type T..What I'm attempting to do is have a delegate like "Serializer" below that I can invoke on an instance of T, such as "Entry.Value" below.Please see the "return Entry..." line below for my wishful thinking.[code]
I am trying to create an object dynamically with CreateObject function. The code is below but it gives error:"ActiveX object can't be created" while calling the CreateObject function.
Public Class Form1 Public Delegate Sub DButtonClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Private Sub DButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) MsgBox("You hit me")
I am working on a site where the meta tags are set in a Masterpage in a section using runat="server". I can update the title, description, keywords, etc... through properties in the Masterpage code-behind, but how would I add or edit non-basic ones such as
I have tried the following, but it always returns 0 for the count.
Dim header As Web.UI.HtmlControls.HtmlHead header = TryCast(Me.Master.FindControl("headerIdName"), Web.UI.HtmlControls.HtmlHead) Dim count As Integer = header.Controls.Count
I have close to 10,000 serverside pages, all of thse use the same stylesheet. I have created a new serverside page which is like a dynamic menu system to help find specific pages from the existing 10,000 pages quickly and easily.
The problem is, that if the serverside pages are accessed the old way using the old menu system, they should retain their old stylesheet. however, if they are accessed via the new menu system, they should use a new refreshed stylesheet.
I'm trying to find a way to change the name of a text box if the name of the text box is first declared as such:[code]I tried the statement: Name = "SBox" & My. Settings. Row Countx but maybe this is wrong.To be very brief I'm trying to resolve this to under the following scenario:
1. Add a new text box to a tab page when user selects "add" button.
2. Each text box must be assigned a unique name
3. Data entered in each text box will be then be saved in my.settings (i.e., for each text box, there will be a corresponding variable/name to hold its text value)
I have one web service reference in my project but it has two url one is live and second one is test,how to switch between these url dynamically in vb.net[code]...
I've created a dialog which I'd like to popup from any function or sub in any class or form that I have in a project. It would nice to have it work exactly like a messagebox except it's got a progressbar and a cancel button on it. It's job is to display the progress of other functions so it should just stay open until I close it or the user selects cancel.Now I've found many of the basic examples on the net and have got the dialog working exactly as they have shown it. The trouble is that the examples are using a counter or thread.sleep which simply adds +1 in the DoWork sub. In other words, it validates that a worker thread can update a progressbar but it's a closed loop that only exists in the dialog's class.The examples don't show how to call an unkown function in another class dynamically, they're simply a hard coded 1+1 in DoWork. To me it's not a real world example because it doesn't show how to plug into the dialog or get a communication stream from other classes and functions that are running and wanting to increment the progressbar.[code]
I have a label, let's call it LblA. I have a SqlDataSource, let's call it sds. Now, I have selected out and managed to get specific values using the select function. I want to set LblA's text to the value selected out of sds. I need this to occur every 5 (or as many as I specify really) seconds. I orignally used a timer object, however, for any of you who have used the timer object before, it likes to refresh the page, this makes it very hard to navigate off of the page; not only that, it's sloppy. Does anybody know a way to easilly update LblA's text from sds without refreshing the actual page.
I've read around and came to the conclusion that I need to use ajax, err... jQuery. However, I really don't know anything about the two except that they are both Javascript libraries? I need a simple way, you might even have to explain it to me like I'm an idiot.
I am using vb.net and SQL server 2005 I have a project with database classes which are generated from database objects. That is I add a dataset to the project and drag and drop a database object onto it. The problem with this is that I have to give a connectionstring which is stored in the code. This is ok while developing the application. But runtime I want to use another connectionstring, both for security reasons and because each user of the application will correspond to a database user (SQL) and shall have a corresponding connectionstring. Is there an easy way to do this without having to restore to plain all datasets and do everything myself?