New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Java event processing model in c# and java
1.
2. Agenda
Introduction
C# Event Processing Macro View
Required Components
Role of Each Component
How To Create Each Type Of Component
3. Introduction
C# is a modern programming language supported
by an extensive set of API structures and classes.
i.e., The .Net Framework
C# supports event-driven programming normally
associated with Microsoft Windows applications.
One normally thinks of events as being generated
by GUI components
…but any object can generate an “event” if it’s
programmed to do so…
4. C# Event Processing Macro
View
Generally speaking, two logical components are
required to implement the event processing model:
1) An event producer (or publisher)
2) An event consumer (or subscriber)
Each logical components has assigned
responsibilities
Consider the following diagram
5. C# Event Processing Macro
View
When an Event occurs Object B processes the
notification is sent to all event notification in its
the subscribers on the list event handler code
for that particular event…
Object A Object B
(Event Publisher) (Event Subscriber)
Subscriber List Event Handler Code
(Object B)
Object A maintains a Object B subscribes to event
list of subscribers for (or events) generated by Object A.
each publishable event
6. C# Event Processing Macro
View
When a Click event occurs
notification is sent to all
the subscribers on the
list…
Button MainApp
(Event Publisher)
(Event Subscriber)
Subscriber List
(MainApp.onButtonClick) onButtonClick
Button maintains a list
of subscribers of its
Click event
7. C# Event Processing Macro
View
These two diagrams hide a lot of details
How is the subscriber list maintained?
How is the event generated?
How is notification sent to each subscriber?
What is an event – really?
How can you add custom event processing to
your programs?
This presentation attempts to answer these
questions in a clear manner…
8. C# Event Processing Macro
View
The .Net API contains lots of classes that
generate different types of events…
Most are GUI related
○ Can you think of a few?
It also contains lots of Delegates
Can you name at least one?
Let’s take a closer look at the C# event
processing model
9. C# Event Processing Macro
View
To implement custom event processing in your
programs you need to understand how to create
the following component types:
Delegates
Event Generating Objects (publishers)
○ Events
○ Event Notification Methods
Event Handling Objects (subscribers)
○ Event Handler Methods
10. Required Components
To implement custom event processing in your
programs you need to understand how to create
the following component types:
Delegates
Event Generating Objects (publishers)
○ Events
○ Event Notification Methods
Event Handling Objects (subscribers)
○ Event Handler Methods
11. Role of Each Component
- Delegate -
Delegate
Delegate types represent references to methods
with a particular parameter list and return type
○ Example
EventHandler(Object sender, EventArgs e)
Represents a method that has two parameters, the
first one being of type Object and the second being
of type EventArgs. Its return type is void.
Any method, so long as its signature matches that
expected by the delegate, can be handled by the
delegate.
12. Role of Each Component
- Delegate -
But just what is a delegate?
A delegate is a reference type object.
A delegate extends either the System.Delegate
or MulticastDelegate class
○ Depends on whether one (Delegate) or more
(MulticaseDelegate) subscribers are involved
You do not extend Delegate or
MulticastDelegate
○ The C# compiler does it for you
13. Role of Each Component
- Delegate -
The delegate object contains the
subscriber list.
It is actually implemented as a linked list where
each node of the list contains a pointer to a
subscriber’s event handler method
Delegates are types – like classes
Except – you declare them with the delegate
keyword and specify the types of methods they
can reference
14. Role of Each Component
- Publisher -
A publisher is any class that can fire an event and
send event notifications to interested subscribers
A publisher class contains the following critical
elements:
An event field
○ This is what subscribers subscribe to…
An event notification method
○ This activates the subscriber notification
process when the event occurs
15. Role of Each Component
- Subscriber -
A subscriber is a class that registers its interest in
a publisher’s events
A subscriber class contains one or more event
handler methods
- Event Handler Method –
An event handler methods is an ordinary method
that is registered with a publisher’s event.
The event handler method’s signature must match
the signature required by the publisher’s event
delegate.
16. Role of Each Component
- Event -
An event is a field in a class
Events are declared with the event keyword
Events must be a delegate type
Delegates, remember, are objects that contain a list of
pointers to subscriber methods that delegate can process
An event field will be null until the first subscriber
subscribes to that event
17. Role of Each Component
- Event Notification Method -
In addition to an event field a publisher will have a
method whose job is to start the subscriber
notification process when the event occurs
An event notification method is just a normal method
It usually has a parameter of EventArgs or a user-defined
subtype of EventArgs.
○ But it can have any number and type of parameters as
required.
18. An Custom Event Example
- Elapsed Minute Timer -
This example includes five separate source files:
Delegate.cs
Publisher.cs
Subscriber.cs
MinuteEventArgs.cs
MainApp.cs
19. using System;
namespace CustomEventExample {
public delegate void ElapsedMinuteEventHandler(Object sender, MinuteEventArgs
e);
} // end CustomEventExample namespace
using System;
namespace CustomEventExample {
public class MinuteEventArgs : EventArgs {
private DateTime date_time;
public MinuteEventArgs(DateTime date_time){
this.date_time = date_time;
}
public int Minute {
get { return date_time.Minute; }
}
}
}
20. using System;
namespace CustomEventExample {
public class Publisher {
public event
ElapsedMinuteEventHandler MinuteTick;
public Publisher(){
Console.WriteLine("Publisher
Created");
}
21. public void countMinutes(){
int current_minute = DateTime.Now.Minute;
while(true){
if(current_minute != DateTime.Now.Minute){
Console.WriteLine("Publisher:
{0}", DateTime.Now.Minute);
onMinuteTick(new
MinuteEventArgs(DateTime.Now));
current_minute = DateTime.Now.Minute;
}//end if
} // end while
} // end countMinutes method
public void onMinuteTick(MinuteEventArgs e){
if(MinuteTick != null){
MinuteTick(this, e);
}
}// end onMinuteTick method
} // end Publisher class definition
} // end CustomEventExample namespace
22. using System;
namespace CustomEventExample {
public class Subscriber {
private Publisher publisher;
public Subscriber(Publisher publisher){
this.publisher = publisher;
subscribeToPublisher();
Console.WriteLine("Subscriber Created");
}
public void subscribeToPublisher(){
publisher.MinuteTick += new ElapsedMinuteEventHandler(minuteTickHandler);
}
public void minuteTickHandler(Object sender, MinuteEventArgs e){
Console.WriteLine("Subscriber Handler Method: {0}", e.Minute);
}
} // end Subscriber class definition
} // end CustomEventExample namespace
23. using System;
namespace CustomEventExample {
public class MainApp {
public static void Main(){
Console.WriteLine("Custom Events are Cool!");
Publisher p = new Publisher();
Subscriber s = new Subscriber(p);
p.countMinutes();
} // end main
} //end MainApp class definition
} // end CustomEventExample namespace
27. The Delegation Event
Model
The concept of Delegation Event model is
A source generates an event and sends it to one or
more listeners.
The listener simply waits until it receives an event. Once
an event is received, the listener processes events and
then returns.
Listeners must register with a source in order to receive
an event notification.
29. Events
o An event is an object that describes a state
change in a source.
o Events are generated by
• Pressing a button
• Entering a character via the keyboard
• Selecting an item in a list
• Clicking the mouse
• And so on…………..
30. Event Sources
o A source is an object that generates an event.
o A source must register listeners.
General form
public void addTypeListener(TypeListener el)
public void removeTypeListener(TypeListener el)
Type - name of the event.
el - reference to the event listener.
31. Event Listeners
o A listener is an object that is notified when an event
occurs.
o Two Requirements :
It must have been registered with one or more sources to
receive notifications.
It must implement methods to receive and process these
notifications.
32. EventObject
o The root of the java event class hierarchy is
EventObject, which is in java.util.
o It is the super class of all the events.
Two methods:
o getsource() - returns the source of the event.
o toString() - returns the string equivalent of
the event.
33. AWTEvent class
o Defined within the java.awt package.
o Subclass of EventObject
o Superclass of all AWT-based events that are handled by
the delegation event model.
34. Java.awt.event
Event class Description
Action Event Generated when a button is pressed,a list item is
double-clicked, or a menu item is selected.
AdjustmentEvent Generated when a scroll bar is manipulated.
ComponentEvent Generated when a component is hidden,
moved,resized, or becomes visible.
ContainerEvent Generated when a component is added to or
removed from a container.
FocusEvent Generated when a component gains or loses
keyboard focus.
35. Event class Description
InputEvent Abstract superclass for all component input event
classes.
ItemEvent Generated when a check box or list item is clicked;
also occurs when a choice selection is made or a
checkable menu item is selected or deselected.
KeyEvent Generated when input is received from the keyboard.
MouseEvent Generated when the mouse is dragged, moved,
clicked, pressed, or released; also generated when
the mouse enters or exits a component.
MousewheelEvent Generated when the mouse wheel is moved.
TextEvent Generated when the value of a text area or text field
is changed.
WindowEvent Generated when a window is activated,closed,
deactivated, deiconified, iconified, opened or quit.
44. DIFFERENCES WITH JAVA & C#
1. Differences in terms of syntax of Java
and C#
2. Modification of concepts in C# that
already exist in Java
3. Language features and concepts that
do not exist in Java at all.
45. Differences in terms of Syntax
JAVA MAIN vs C#
MAIN
Java:
public static void main(String[]
args)
C#:
static void Main(string[] args)
string is shorthand for the System.String class in C#.
Another interesting point is that in C#, your Main method
can actually be declared to be parameter -less
static void Main()
46. Differences in terms of Syntax
PRINT STATEMENTS
Java:
System.out.println("Hello world!");
C#:
System.Console.WriteLine("Hello
world!");
or
Console.WriteLine("Hello again!");
47. Differences in terms of Syntax
DECLARING CONSTANTS
Java:
In Java, compile-time constant values are declared inside a
class as
static final int K = 100;
C#:
To declare constants in C# the const keyword is used for
compile time constants while the readonly keyword is used for
runtime constants. The semantics of constant primitives and
object references in C# is the same as in Java.
const int K = 100;
48. Modified concepts from
Java
IMPORTING LIBRARIES
Both the langugaes support this functionality
and C# follows Java’s technique for importing
libraries:
C#: using keyword
using System;
using System.IO;
using System.Reflection ;
Java: import keyword
import java.util .*;
import java.io.*;
49. Enumerations
Java's lack of enumerated types leads to the use of
integers in situations that do not guarantee type
safety.
C# code:
public enum Direction {North=1, East=2, West=4, South=8};
Usage:
D i r e c t io n w a l l = D i r e c t i o n. No rt h;
Java equivalent code will be:
public class Direction {
public final static int NORTH = 1;
public final static int EAST = 2;
public final static int WEST = 3;
public final static int SOUTH = 4;
}
Usage:
i n t w a l l = D i r e c t i o n . NO RT H;
50. Reference
The complete Reference, Java2, Fifth edition.
Websites:
Java vs. C#: Code to Code Comparison
http://www.javacamp.org/javavscsharp/
A Comparative Overview of C#:
http://genamics.com/developer/csharp_comparativ
e.htm