Csharp/C Sharp/Class Interface/Overloading Method
Illustrates method overloading
/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy
Publisher: Sybex;
ISBN: 0782129110
*/
/*
Example5_9.cs illustrates method overloading
*/
// declare the Swapper class
class Swapper
{
// this Swap() method swaps two int parameters
public void Swap(ref int x, ref int y)
{
int temp = x;
x = y;
y = temp;
}
// this Swap() method swaps two float parameters
public void Swap(ref float x, ref float y)
{
float temp = x;
x = y;
y = temp;
}
}
public class Example5_9
{
public static void Main()
{
// create a Swapper object
Swapper mySwapper = new Swapper();
// declare two int variables
int intValue1 = 2;
int intValue2 = 5;
System.Console.WriteLine("initial intValue1 = " + intValue1 +
", intValue2 = " + intValue2);
// swap the two float variables
// (uses the Swap() method that accepts int parameters)
mySwapper.Swap(ref intValue1, ref intValue2);
// display the final values
System.Console.WriteLine("final intValue1 = " + intValue1 +
", intValue2 = " + intValue2);
// declare two float variables
float floatValue1 = 2f;
float floatValue2 = 5f;
System.Console.WriteLine("initial floatValue1 = " + floatValue1 +
", floatValue2 = " + floatValue2);
// swap the two float variables
// (uses the Swap() method that accepts float parameters)
mySwapper.Swap(ref floatValue1, ref floatValue2);
// display the final values
System.Console.WriteLine("final floatValue1 = " + floatValue1 +
", floatValue2 = " + floatValue2);
mySwapper.Swap(ref floatValue1, ref floatValue2);
}
}
Operator Overloading
using System;
public class Rectangle {
public int width;
public int height;
public Rectangle(int width, int height) {
this.width = width;
this.height = height;
}
public override string ToString() {
return "width = " + width + ", height = " + height;
}
public static bool operator ==(Rectangle lhs, Rectangle rhs) {
Console.WriteLine("In operator ==");
if (lhs.width == rhs.width && lhs.height == rhs.height) {
return true;
} else {
return false;
}
}
public static bool operator !=(Rectangle lhs, Rectangle rhs) {
Console.WriteLine("In operator !=");
return !(lhs == rhs);
}
public override bool Equals(object obj) {
Console.WriteLine("In Equals()");
if (!(obj is Rectangle)) {
return false;
} else {
return this == (Rectangle)obj;
}
}
public static Rectangle operator +(Rectangle lhs, Rectangle rhs) {
Console.WriteLine("In operator +");
return new Rectangle(
lhs.width + rhs.width, lhs.height + rhs.height);
}
}
class MainClass {
public static void Main() {
Rectangle myRectangle = new Rectangle(1, 4);
Console.WriteLine("myRectangle: " + myRectangle);
Rectangle myRectangle2 = new Rectangle(1, 4);
Console.WriteLine("myRectangle2: " + myRectangle2);
if (myRectangle == myRectangle2) {
Console.WriteLine(
"myRectangle is equal to myRectangle2");
} else {
Console.WriteLine(
"myRectangle is not equal to myRectangle2");
}
Rectangle myRectangle3 = myRectangle + myRectangle2;
Console.WriteLine("myRectangle3: " + myRectangle3);
}
}
Overloaded methods with identical signatures cause compilation errors, even if return types are different.
public class MethodOverloadError
{
public int Square( int x )
{
return x * x;
}
public double Square( int y )
{
return y * y;
}
}