473,545 Members | 1,759 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Do I need Delegates?

Folks,

I am confused as to how to implement the following solution.

I have a series of processing steps, each of which contains similar features
(forms, etc). Therefore, I create a base class, Step, and subclass from that
for specific steps. The Step class has a method, Execute(), which can return
either Success or Failure.

I have a Step Driver, which instantiates the first Step, calls its Execute()
method, and then, depending on the status, runs the approriate next Step.

How do I know what the approriate next step is? I could embed this in the
Step Driver by building some data structure that can be used to decide what
to do. But this is clumsy.

In fact, each Step should "know" what the next Step for Success is, and what
the next Step for Failure is. The Execute() method, instead of returning
Success or Failure, should simply return the approriate next Step.

My initial attempt resulted, not surprisingly, in immediately using up all
available memory. Futher attmpts resulted in compiler errors.

I need some assistance in implementing the following (pseudo) code. Thanks
in advance for all suggestions!

/Joel Finkel
fi****@sd-il.com

class Step : IDisposable {

string name;
Step SuccessStep; // do this is sucessful
Step NextStep; // handle failure

public Step {
}

public void ShowName() {
MessageBox.Show (name);
}

public Step Execute() {
return _execute();
}

public void Dispose() }
}

private Step _execute() {
// override for each sub class
}
}

class Step_1 : Step {

public Step_1 {
SuccessStep = Step_2; // do this is successful
FailureStep = Step_1a; // handle failure
}

private Step _execute() {
if (do some processing) {
return SuccessStep;
} else {
return FailureStep;
}
}
}

class Step_2 : Step {

public Step_2 {
SuccessStep = null; // this is the last step
FailureStep = Step_2a; // handle failure
}

private Step _execute() {
if (something) {
return SuccessStep;
} else {
return FailureStep;
}
}
}

class Step_Driver {

Step_Drvier() {
}

public void Main() {

Step nextStep;

Step thisStep = new Step_1();

// process steps until there ain't no more
while (thisStep != null) {
nextStep = thisStep.Execut e();
thisStep.Dispos e();
if (nextStep != null) {
thisStep = new nextStep();
}
}
}
}
Nov 17 '05 #1
16 2190
I don't know, Joel. Seems like you're working too hard here. I presume that
these "Steps" are executed one at a time, in a sequence, like the following:

1, 2, 3, 4, 5, 6, 7, 8

Am I correct? If so, doesn't that look an awful lot like an array or a
Collection, or a List?

--
HTH,

Kevin Spencer
Microsoft MVP
..Net Developer
A watched clock never boils.

"Joel Finkel" <Jo********@dis cussions.micros oft.com> wrote in message
news:05******** *************** ***********@mic rosoft.com...
Folks,

I am confused as to how to implement the following solution.

I have a series of processing steps, each of which contains similar
features
(forms, etc). Therefore, I create a base class, Step, and subclass from
that
for specific steps. The Step class has a method, Execute(), which can
return
either Success or Failure.

I have a Step Driver, which instantiates the first Step, calls its
Execute()
method, and then, depending on the status, runs the approriate next Step.

How do I know what the approriate next step is? I could embed this in the
Step Driver by building some data structure that can be used to decide
what
to do. But this is clumsy.

In fact, each Step should "know" what the next Step for Success is, and
what
the next Step for Failure is. The Execute() method, instead of returning
Success or Failure, should simply return the approriate next Step.

My initial attempt resulted, not surprisingly, in immediately using up all
available memory. Futher attmpts resulted in compiler errors.

I need some assistance in implementing the following (pseudo) code.
Thanks
in advance for all suggestions!

/Joel Finkel
fi****@sd-il.com

class Step : IDisposable {

string name;
Step SuccessStep; // do this is sucessful
Step NextStep; // handle failure

public Step {
}

public void ShowName() {
MessageBox.Show (name);
}

public Step Execute() {
return _execute();
}

public void Dispose() }
}

private Step _execute() {
// override for each sub class
}
}

class Step_1 : Step {

public Step_1 {
SuccessStep = Step_2; // do this is successful
FailureStep = Step_1a; // handle failure
}

private Step _execute() {
if (do some processing) {
return SuccessStep;
} else {
return FailureStep;
}
}
}

class Step_2 : Step {

public Step_2 {
SuccessStep = null; // this is the last step
FailureStep = Step_2a; // handle failure
}

private Step _execute() {
if (something) {
return SuccessStep;
} else {
return FailureStep;
}
}
}

class Step_Driver {

Step_Drvier() {
}

public void Main() {

Step nextStep;

Step thisStep = new Step_1();

// process steps until there ain't no more
while (thisStep != null) {
nextStep = thisStep.Execut e();
thisStep.Dispos e();
if (nextStep != null) {
thisStep = new nextStep();
}
}
}
}

Nov 17 '05 #2

"Joel Finkel" <Jo********@dis cussions.micros oft.com> wrote in message
news:05******** *************** ***********@mic rosoft.com...
Folks,

I am confused as to how to implement the following solution.

I have a series of processing steps, each of which contains similar
features
(forms, etc). Therefore, I create a base class, Step, and subclass from
that
for specific steps. The Step class has a method, Execute(), which can
return
either Success or Failure.

I have a Step Driver, which instantiates the first Step, calls its
Execute()
method, and then, depending on the status, runs the approriate next Step.

How do I know what the approriate next step is? I could embed this in the
Step Driver by building some data structure that can be used to decide
what
to do. But this is clumsy.

In fact, each Step should "know" what the next Step for Success is, and
what
the next Step for Failure is. The Execute() method, instead of returning
Success or Failure, should simply return the approriate next Step.

My initial attempt resulted, not surprisingly, in immediately using up all
available memory. Futher attmpts resulted in compiler errors.

I need some assistance in implementing the following (pseudo) code.
Thanks
in advance for all suggestions!


I agree with Kevin that if this is a static sequence, you should just use an
array of the steps you need to take and iterate it. However, if this is a
more complicated scenario where multiple steps might be taken your on the
right track. However, your code will not compile as is, you are missing
parentheses on your constructors(pu blic Step_2() { ... }) and are
referencing type names instead of creating them (ie new Step_2();). Could
you build a short but complete example[1]?

1. http://www.yoda.arachsys.com/csharp/complete.html
Nov 17 '05 #3
> what the next Step for Success is, and what
the next Step for Failure is.
From his description it doesnt sound to me like a sequence of events, it
sounds more like a decision tree because we potentially would have different
next steps based on the current steps result. I agree with you that it would
be a poor design to have the next step(s) encapsulated within the step. Each
step should only contain the logic necessary to determine its truthality;
this will maximize steps reuseability.
The first big problem is that you are basing the steps method calls to a
class and not an interface, this will abstract yyour problem out and make it
more flexible to new classes.

public interface IStep
{
string Id;
bool Execute();
void Dispose();
}

next encapsulate the decision data, each step would need two of these, one
for true and one for false.
public strut Decision
{
bool Result;
string NextItemId;
}

I would say having an array of two items would be good; steps and the
relationships.

private Hashtable Relationships;
private NameValueCollec tion Steps;

Steps collection would contain ISteps.Id as the key and IStep as value. So
when you do a Steps["xyz"] you would get back an object of IStep with an Id
of xyz.

Relationships would have the keys of the current ID and would return a value
object Decision.

So how this works overall. After your relationships and steps are loaded
into the arrays. An example of how it would work: 'Step1' first to be
processed calls execute and returns true, iterates over the relationship
collection and acquires the NextItemId's for all decisions that are true. It
then takes these Id's and obtains the ISteps from the Steps collection,
calls execute method and the whole process starts over again. Actually the
process MUST be recursive.

You might also want to look up the Filter design pattern.

Joe
"Daniel O'Connell [C# MVP]" <onyxkirx@--NOSPAM--comcast.net> wrote in
message news:%2******** ********@tk2msf tngp13.phx.gbl. ..
"Joel Finkel" <Jo********@dis cussions.micros oft.com> wrote in message
news:05******** *************** ***********@mic rosoft.com...
Folks,

I am confused as to how to implement the following solution.

I have a series of processing steps, each of which contains similar
features
(forms, etc). Therefore, I create a base class, Step, and subclass from
that
for specific steps. The Step class has a method, Execute(), which can
return
either Success or Failure.

I have a Step Driver, which instantiates the first Step, calls its
Execute()
method, and then, depending on the status, runs the approriate next Step.

How do I know what the approriate next step is? I could embed this in
the
Step Driver by building some data structure that can be used to decide
what
to do. But this is clumsy.

In fact, each Step should "know" what the next Step for Success is, and
what
the next Step for Failure is. The Execute() method, instead of returning
Success or Failure, should simply return the approriate next Step.

My initial attempt resulted, not surprisingly, in immediately using up
all
available memory. Futher attmpts resulted in compiler errors.

I need some assistance in implementing the following (pseudo) code.
Thanks
in advance for all suggestions!


I agree with Kevin that if this is a static sequence, you should just use
an array of the steps you need to take and iterate it. However, if this is
a more complicated scenario where multiple steps might be taken your on
the right track. However, your code will not compile as is, you are
missing parentheses on your constructors(pu blic Step_2() { ... }) and are
referencing type names instead of creating them (ie new Step_2();). Could
you build a short but complete example[1]?

1. http://www.yoda.arachsys.com/csharp/complete.html

Nov 17 '05 #4
First of all, thanks for the responses!

Secondly, what I provided was pseudo code, simply to describe the solution I
was thinking about.

Thirdly, Joe, you are right, I need to make a decision as to which next step
to take based on the status of the previous step. It is always a binary
decision.

Since I posted this, I have thought that perhaps each step should actually
NOT encapsulate the decision. This informaiton should be a separate data
structure (object) that I can load from a configuration file.

I also came to the conclusion that a recursive solution is probably best.
My only concern is that the target is a Pocket PC, and I have to be extremely
mindful of memory usage.

Joe, I need to study the code you provide and think about it.

Once again, thanks so much for all your suggestions.

/Joel Finkel
fi****@sd-il.com

"Joe [MCAD]" wrote:
what the next Step for Success is, and what
the next Step for Failure is.


From his description it doesnt sound to me like a sequence of events, it
sounds more like a decision tree because we potentially would have different
next steps based on the current steps result. I agree with you that it would
be a poor design to have the next step(s) encapsulated within the step. Each
step should only contain the logic necessary to determine its truthality;
this will maximize steps reuseability.
The first big problem is that you are basing the steps method calls to a
class and not an interface, this will abstract yyour problem out and make it
more flexible to new classes.

public interface IStep
{
string Id;
bool Execute();
void Dispose();
}

next encapsulate the decision data, each step would need two of these, one
for true and one for false.
public strut Decision
{
bool Result;
string NextItemId;
}

I would say having an array of two items would be good; steps and the
relationships.

private Hashtable Relationships;
private NameValueCollec tion Steps;

Steps collection would contain ISteps.Id as the key and IStep as value. So
when you do a Steps["xyz"] you would get back an object of IStep with an Id
of xyz.

Relationships would have the keys of the current ID and would return a value
object Decision.

So how this works overall. After your relationships and steps are loaded
into the arrays. An example of how it would work: 'Step1' first to be
processed calls execute and returns true, iterates over the relationship
collection and acquires the NextItemId's for all decisions that are true. It
then takes these Id's and obtains the ISteps from the Steps collection,
calls execute method and the whole process starts over again. Actually the
process MUST be recursive.

You might also want to look up the Filter design pattern.

Joe
"Daniel O'Connell [C# MVP]" <onyxkirx@--NOSPAM--comcast.net> wrote in
message news:%2******** ********@tk2msf tngp13.phx.gbl. ..

"Joel Finkel" <Jo********@dis cussions.micros oft.com> wrote in message
news:05******** *************** ***********@mic rosoft.com...
Folks,

I am confused as to how to implement the following solution.

I have a series of processing steps, each of which contains similar
features
(forms, etc). Therefore, I create a base class, Step, and subclass from
that
for specific steps. The Step class has a method, Execute(), which can
return
either Success or Failure.

I have a Step Driver, which instantiates the first Step, calls its
Execute()
method, and then, depending on the status, runs the approriate next Step.

How do I know what the approriate next step is? I could embed this in
the
Step Driver by building some data structure that can be used to decide
what
to do. But this is clumsy.

In fact, each Step should "know" what the next Step for Success is, and
what
the next Step for Failure is. The Execute() method, instead of returning
Success or Failure, should simply return the approriate next Step.

My initial attempt resulted, not surprisingly, in immediately using up
all
available memory. Futher attmpts resulted in compiler errors.

I need some assistance in implementing the following (pseudo) code.
Thanks
in advance for all suggestions!


I agree with Kevin that if this is a static sequence, you should just use
an array of the steps you need to take and iterate it. However, if this is
a more complicated scenario where multiple steps might be taken your on
the right track. However, your code will not compile as is, you are
missing parentheses on your constructors(pu blic Step_2() { ... }) and are
referencing type names instead of creating them (ie new Step_2();). Could
you build a short but complete example[1]?

1. http://www.yoda.arachsys.com/csharp/complete.html


Nov 17 '05 #5

"Joel Finkel" wrote:
First of all, thanks for the responses!

Secondly, what I provided was pseudo code, simply to describe the
solution I was thinking about.

Thirdly, Joe, you are right, I need to make a decision as to which
next step to take based on the status of the previous step. It is
always a binary decision.
A decision table might be helpful.

http://en.wikipedia.org/wiki/Decision_table
Since I posted this, I have thought that perhaps each step should
actually NOT encapsulate the decision. This informaiton should be a
separate data structure (object) that I can load from a configuration
file.

I also came to the conclusion that a recursive solution is probably
best. My only concern is that the target is a Pocket PC, and I have to
be extremely mindful of memory usage.


I've written a small decision table toolkit in C# (which I haven't
released yet to the public). It does indeed use recursion. It also uses
delegates, so your initial question is in line, at least, with the way I
solved this problem. This is the recursive function for making a
"decision":

private int Decide(object[] args, int actionIndex, int conditionIndex)
{
#region Guards

if(conditionInd ex >= conditions.Leng th)
{
return actionIndex;
}

#endregion

Condition c = conditions[conditionIndex];

if(c(args))
{
actionIndex |= 1 << conditionIndex;
}

return Decide(args, actionIndex, conditionIndex + 1);
}

Some explanation:

Decision tables are made up of four quadrants. The upper left corner
contains the rows of conditions. Here, conditions are represented by
delegates that return a boolean value. The 'conditions' variable is a
collection of condition delegates. The Decide function recursively calls
itself until it has reached the last condition.

Each condition is called and passed the 'args' variable, which could
represent anything. If the condition returns true, a flag is set into
the 'actionIndex'. When the Decide method finishes, the 'actionIndex'
will be used to determine which actions, also represented by delegates,
will be invoked. That part gets a little complicated, but not too much
so.

Anyway, if any of this sounds intriguing or useful, let me know, and I
can go into more detail.



Nov 17 '05 #6
Here is a solution that seems to work. The implementation of MyCollection is
not shown. Comments are appreciated. Thanks in advance.

/Joel Finkel
fi****@sd-il.com
public delegate bool myDelegate();

public class Step
{
public Step()
{
}

public bool Execute(myDeleg ate p_process)
{
// run the customized processing
return p_process();
}
}
public class StepProcess
/*
* This class contains customized code for all the steps we have defined.
* It also contains a standard form.
*/
{
// Most steps need access to a standard form
private StepForm _myForm;

public StepProcess()
{
// create an instance of the standard form
_myForm = new StepForm();
}

public void Dispose()
{
// cleanup
_myForm.Dispose ();
}

public bool Step1()
{
_myForm.Text = "Step 1";
return _myForm.ShowDia log() == DialogResult.Ye s;
}

public bool Step2()
{
_myForm.Text = "Step 2";
return _myForm.ShowDia log() == DialogResult.Ye s;
}

public bool Step3()
{
MessageBox.Show ("Hi, I am Step 3");
return true;
}
}
public class Decision
{
private string _successStep;
private string _failureStep;

public string successStep
{
get { return _successStep; }
}

public string failureStep
{
get { return _failureStep; }
}

public Decision(string p_successStep, string p_failureStep)
{
_successStep = p_successStep;
_failureStep = p_failureStep;
}
}
public class StepDriver
{
static void Main()
{
// create an instance of the object that has all the steps and the
standard form
StepProcess myStepProcess = new StepProcess();

/*
* TODO: this can probably be done through reflection
*/
// a bag of step procesees
MyCollection StepProcesses = new MyCollection();
StepProcesses.A dd("Step1", new myDelegate(mySt epProcess.Step1 ));
StepProcesses.A dd("Step2", new myDelegate(mySt epProcess.Step2 ));
StepProcesses.A dd("Step3", new myDelegate(mySt epProcess.Step3 ));

/*
* TODO: create this from a configuration file
*/
// a bag of decisions
MyCollection Decisions = new MyCollection();
Decisions.Add(" Step1", new Decision("Step2 ", "Step1"));
Decisions.Add(" Step2", new Decision("Step3 ", "Step1"));
Decisions.Add(" Step3", new Decision("", "Step1"));

// status of steps' execution
bool stat;

// use this to decide what the next step is
Decision thisDecision;

// use this to hold the proper function
myDelegate thisProcess;

// use this to execute the function
Step myStep = new Step();

// start with Step 1
string thisStep = "Step1";

while (thisStep != "")
{
// get this step's decision from the bag
thisDecision = (Decision) Decisions[thisStep];

// get the step's process from the bag
thisProcess = (myDelegate) StepProcesses[thisStep];

// ececute the process
stat = myStep.Execute( thisProcess);

// do the right thing
if (stat)
{
thisStep = thisDecision.su ccessStep;
}
else
{
thisStep = thisDecision.fa ilureStep;
}
}

// cleanup
myStepProcess.D ispose();

// tell the user we are done
MessageBox.Show ("Done");
}
}
Nov 17 '05 #7
I'm interested in the details. Please explain.

"Leslie Sanford" <ja**********@B iteMeHotmail.co m> wrote in message
news:wN******** ************@co mcast.com...

"Joel Finkel" wrote:
First of all, thanks for the responses!

Secondly, what I provided was pseudo code, simply to describe the
solution I was thinking about.

Thirdly, Joe, you are right, I need to make a decision as to which
next step to take based on the status of the previous step. It is
always a binary decision.


A decision table might be helpful.

http://en.wikipedia.org/wiki/Decision_table
Since I posted this, I have thought that perhaps each step should
actually NOT encapsulate the decision. This informaiton should be a
separate data structure (object) that I can load from a configuration
file.

I also came to the conclusion that a recursive solution is probably
best. My only concern is that the target is a Pocket PC, and I have to
be extremely mindful of memory usage.


I've written a small decision table toolkit in C# (which I haven't
released yet to the public). It does indeed use recursion. It also uses
delegates, so your initial question is in line, at least, with the way I
solved this problem. This is the recursive function for making a
"decision":

private int Decide(object[] args, int actionIndex, int conditionIndex)
{
#region Guards

if(conditionInd ex >= conditions.Leng th)
{
return actionIndex;
}

#endregion

Condition c = conditions[conditionIndex];

if(c(args))
{
actionIndex |= 1 << conditionIndex;
}

return Decide(args, actionIndex, conditionIndex + 1);
}

Some explanation:

Decision tables are made up of four quadrants. The upper left corner
contains the rows of conditions. Here, conditions are represented by
delegates that return a boolean value. The 'conditions' variable is a
collection of condition delegates. The Decide function recursively calls
itself until it has reached the last condition.

Each condition is called and passed the 'args' variable, which could
represent anything. If the condition returns true, a flag is set into
the 'actionIndex'. When the Decide method finishes, the 'actionIndex'
will be used to determine which actions, also represented by delegates,
will be invoked. That part gets a little complicated, but not too much
so.

Anyway, if any of this sounds intriguing or useful, let me know, and I
can go into more detail.




Nov 17 '05 #8

"Joe [MCAD]" wrote:
I'm interested in the details. Please explain.


I wanted to write a small toolkit that implements decision tables:

http://en.wikipedia.org/wiki/Decision_table

I implemented the toolkit by writing a DecisionTable class that uses a
collection of delegates representing the conditions. In addition, it has
a collection of delegates representing the actions. The DecisionTable
has a Decide method. When the Decide method is called, the DecisionTable
recursively goes through its condition delegates, invoking each one.

If a condition returns true, a bitwise operation takes place setting a
bit in an index variable to 1. This bit is offset so that each bit in
the index variable represents the result of a specific condition. When
the Decide method finally finishes, it returns the index variable. It's
value is used to retrieve the actions to invoke from a collection. The
actions corresponds to the result of the conditions.

The toolkit is pretty basic right now. I need to spend some time with it
to polish it up.
Nov 17 '05 #9
You definitely got my attention. I have been working on
http://sourceforge.net/projects/sdsre because I needed (and still do) a way
to have rules in XML. On this current release I came to the conclusion that
execution of the rules shouldnt actually be contained in the rules
themselves, the associations between rules is becoming too complicated and
performance is slowing down on larger sets. From what I read so far I am
intereseted in implementing a decision table into SRE in its next rewrite,
mabey intergrate both of the projects. I had some questions i havent
understood yet, in a rule based system some rules are dependent on other
rules truthality, and some take priority over others. In SRE this has all
been internalized into the engine to make the rules simple (main goal of the
project). How would a decision table be optimized to evaluate only those
rules that could be executed in the current context. Another issue,
exaluating expressions are expensive and some rules are practally identical
to other rules except for maney an AND statement or two, would it be
possible to break down expressions into identical subexpressions and
evaluate only once. I would like to see your project

Joe
"Leslie Sanford" <ja**********@B iteMeHotmail.co m> wrote in message
news:l5******** *************** *******@comcast .com...

"Joe [MCAD]" wrote:
I'm interested in the details. Please explain.


I wanted to write a small toolkit that implements decision tables:

http://en.wikipedia.org/wiki/Decision_table

I implemented the toolkit by writing a DecisionTable class that uses a
collection of delegates representing the conditions. In addition, it has a
collection of delegates representing the actions. The DecisionTable has a
Decide method. When the Decide method is called, the DecisionTable
recursively goes through its condition delegates, invoking each one.

If a condition returns true, a bitwise operation takes place setting a bit
in an index variable to 1. This bit is offset so that each bit in the
index variable represents the result of a specific condition. When the
Decide method finally finishes, it returns the index variable. It's value
is used to retrieve the actions to invoke from a collection. The actions
corresponds to the result of the conditions.

The toolkit is pretty basic right now. I need to spend some time with it
to polish it up.

Nov 17 '05 #10

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

6
2267
by: Jeffrey T. Smith | last post by:
Back when the new J2SE1.5 features were announced, there was a JavaLive community chat (http://java.sun.com/developer/community/chat/JavaLive/2003/jl0729.html) in which Neal Gafter explains the Sun stance on lack of support for delegates: .... There are serious semantic problems with trying to add delegates to a language in a consistent...
2
9157
by: Jon Davis | last post by:
The garbage handler in the .NET framework is handy. When objects fall out of scope, they are automatically destroyed, and the programmer doesn't have to worry about deallocating the memory space for those objects. In fact, all the programmer has to worry about is the total sum of objects loaded into RAM at any known point. Memory leaks are not...
4
339
by: Stephen | last post by:
I am new to C# and can't get my head round what delegates are and what they are for. can anyone enlighten me?
30
3608
by: Burkhard | last post by:
Hi, I am new to C# (with long year experience in C++) and I am a bit confused by the language construct of events. What is it I can do with events that I cannot do with delegates? At the moment it seems to me that Microsoft has developed similar functionality via two keywords. I do understand that an event offers better encapsulation as the...
6
2484
by: Jon Davis | last post by:
I've used delegates fairly heavily for several years in C# for event handling and for starting threads. Does anyone have any real-world scenarios where delegates were both extremely useful and extremely appropriate (as opposed to other programmatic means or mechanisms) that were NOT related to events and ThreadStarts? Thanks, Jon
0
4758
by: bharathreddy | last post by:
Delegates Here in this article I will explain about delegates in brief. Some important points about delegates. This article is meant to only those who already know delegates, it will be a quick review not a detailed one. Delegates quite simply are special type of object, a delegate just contains the details of a method. One good way to...
6
2639
by: =?Utf-8?B?T2xkQ2FEb2c=?= | last post by:
My question is regarding the use of delegates in C#. I see how .Net uses delegates to wire event handlers to events. It’s an object created by a single line of code by the system and that makes perfect sense to me. I understand that there is a lot of code underneath that the system has created that makes it all work, thereby making it...
7
3408
by: Siegfried Heintze | last post by:
I'm studying the book "Microsoft Visual Basic.NET Language Reference" and I would like some clarify the difference between events and delegates. On page 156 I see a WinForms example of timer that uses the "WithEvents" and events. There is another example on page 124 that shows how to use delegates to sort an array. I don't understand the...
5
1185
by: puzzlecracker | last post by:
thanks
0
7656
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. ...
0
7807
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that...
1
7419
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For...
0
7756
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the...
0
5971
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then...
0
4944
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert...
0
3450
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in...
1
1879
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
0
703
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.