Csharp/C Sharp/Class Interface/Overloading Method

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Illustrates method overloading

<source lang="csharp"> /* 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);
 }

}

      </source>


Operator Overloading

<source lang="csharp"> 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);
   }

}

</source>


Overloaded methods with identical signatures cause compilation errors, even if return types are different.

<source lang="csharp">

public class MethodOverloadError {

  public int Square( int x )
  {
     return x * x;
  }
  public double Square( int y )
  {
     return y * y;
  }

}

      </source>