Code: Select all
,Code: Select all
and [syntax="..."] tags where appropriate when posting code. Your post has been edited to reflect how we'd like it posted. Please read: [url=http://forums.devnetwork.net/viewtopic.php?t=21171]Posting Code in the Forums[/url] to learn how to do it too.[/color]
Hello friends!
Programming C#
[quote]
5.3.2 Creating Polymorphic Methods
To create a method that supports polymorphism, you need only mark it as virtual in its base
class. For example, to indicate that the method DrawWindow( ) of class Window in
Example 5-1 is polymorphic, simply add the keyword virtual to its declaration, as follows:
public virtual void DrawWindow( )
Now each derived class is free to implement its own version of DrawWindow( ). To do so,
simply override the base class virtual method by using the keyword override in the derived
class method definition, and then add the new code for that overridden method.
In the following excerpt from Example 5-2 (which appears later in this section), ListBox
derives from Window and implements its own version of DrawWindow( ):
[syntax="csharp"]public override void DrawWindow( )
{
base.DrawWindow( ); // invoke the base method
Console.WriteLine ("Writing string to the listbox: {0}",
listBoxContents);
}DrawWindow( ) works. Similarly, you'll override this method in another class, Button, also
derived from Window.
In the body of Example 5-2, you'll first create three objects, a Window, a ListBox, and a
Button. You'll then call DrawWindow( ) on each:
Code: Select all
Window win = new Window(1,2);
ListBox lb = new ListBox(3,4,"Stand alone list box");
Button b = new Button(5,6);
win.DrawWindow( );
lb.DrawWindow( );
b.DrawWindow( );So far, nothing polymorphic has been done. The real magic starts when you create an array of
Window objects. Because a ListBox is-a Window, you are free to place a ListBox into a
Window array. You can also place a Button into an array of Window objects because a Button
is also a Window:
Code: Select all
Window[] winArray = new Window[3];
winArray[0] = new Window(1,2);
winArray[1] = new ListBox(3,4,"List box in array");
winArray[2] = new Button(5,6);
What happens when you call DrawWindow( ) on each of these objects?
for (int i = 0;i < 3; i++)
{
winArray[i].DrawWindow( );
}) on each. If you had not marked DrawWindow as virtual, Window's DrawWindow( ) method
would be called three times. However, because you did mark DrawWindow( ) as virtual and
because the derived classes override that method, when you call DrawWindow( ) on the array,
the compiler determines the runtime type of the actual objects (a Window, a ListBox and a
Button) and calls the right method on each. This is the essence of polymorphism. The
complete code for this example is shown in Example 5-2.
Example 5-2. Using virtual methods
Code: Select all
using System;
public class Window
{
// constructor takes two integers to
// fix location on the console
public Window(int top, int left)
{
this.top = top;
this.left = left;
}
// simulates drawing the window
public virtual void DrawWindow( )
{
Console.WriteLine("Window: drawing Window at {0}, {1}",
top, left);
}
// these members are protected and thus visible
// to derived class methods. We'll examine this
// later in the chapter
protected int top;
protected int left;
}
// ListBox derives from Window
public class ListBox : Window
{
// constructor adds a parameter
public ListBox(
int top,
int left,
string contents):
base(top, left) // call base constructor
{
listBoxContents = contents;
}
// an overridden version (note keyword) because in the
// derived method we change the behavior
public override void DrawWindow( )
{
base.DrawWindow( ); // invoke the base method
Console.WriteLine ("Writing string to the listbox: {0}",
listBoxContents);
}
private string listBoxContents; // new member variable
}
public class Button : Window
{
public Button(
int top,
int left):
base(top, left)
{
}
// an overridden version (note keyword) because in the
// derived method we change the behavior
public override void DrawWindow( )
{
Console.WriteLine("Drawing a button at {0}, {1}\n",
top, left);
}
}
public class Tester
{
static void Main( )
{
Window win = new Window(1,2);
ListBox lb = new ListBox(3,4,"Stand alone list box");
Button b = new Button(5,6);
win.DrawWindow( );
lb.DrawWindow( );
b.DrawWindow( );
Window[] winArray = new Window[3];
winArray[0] = new Window(1,2);
winArray[1] = new ListBox(3,4,"List box in array");
winArray[2] = new Button(5,6);
for (int i = 0;i < 3; i++)
{
winArray[i].DrawWindow( );
}
}
}Window: drawing Window at 1, 2
Window: drawing Window at 3, 4
Writing string to the listbox: Stand alone list box
Drawing a button at 5, 6
Window: drawing Window at 1, 2
Window: drawing Window at 3, 4
Writing string to the listbox: List box in array
Drawing a button at 5, 6
Note that throughout this example, we've marked the new overridden methods with the
keyword override:
public override void DrawWindow( )
The compiler now knows to use the overridden method when treating these objects
polymorphically. The compiler is responsible for tracking the real type of the object and for
handling the "late binding" so that it is ListBox.DrawWindow( ) that is called when the
Window reference really points to a ListBox object.
[/quote]
Is it possible to do something like that in PHP?Polymorphism by inheritance in PHP....May you give me a simple example?
Does PHP support override ,Like C#?
Thanks in advance.
feyd | Please use[/syntax]
Code: Select all
,Code: Select all
and [syntax="..."] tags where appropriate when posting code. Your post has been edited to reflect how we'd like it posted. Please read: [url=http://forums.devnetwork.net/viewtopic.php?t=21171]Posting Code in the Forums[/url] to learn how to do it too.[/color]