| // This example illustrates how C++ classes can be used from C# using SWIG. | |
| // The C# class gets mapped onto the C++ class and behaves as if it is a C# class. | |
| using System; | |
| public class runme | |
| { | |
| static void Main() | |
| { | |
| // ----- Object creation ----- | |
| Console.WriteLine( "Creating some objects:" ); | |
| using (Square s = new Square(10)) | |
| using (Circle c = new Circle(10)) | |
| { | |
| Console.WriteLine( " Created circle " + c ); | |
| Console.WriteLine( " Created square " + s ); | |
| // ----- Access a static member ----- | |
| Console.WriteLine( "\nA total of " + Shape.nshapes + " shapes were created" ); | |
| // ----- Member data access ----- | |
| // Notice how we can do this using functions specific to | |
| // the 'Circle' class. | |
| c.x = 20; | |
| c.y = 30; | |
| // Now use the same functions in the base class | |
| Shape shape = s; | |
| shape.x = -10; | |
| shape.y = 5; | |
| Console.WriteLine( "\nHere is their current position:" ); | |
| Console.WriteLine( " Circle = (" + c.x + " " + c.y + ")" ); | |
| Console.WriteLine( " Square = (" + s.x + " " + s.y + ")" ); | |
| // ----- Call some methods ----- | |
| Console.WriteLine( "\nHere are some properties of the shapes:" ); | |
| Shape[] shapes = {c,s}; | |
| // for (int i=0; i<shapes.Size; i++) | |
| for (int i=0; i<2; i++) | |
| { | |
| Console.WriteLine( " " + shapes[i].ToString() ); | |
| Console.WriteLine( " area = " + shapes[i].area() ); | |
| Console.WriteLine( " perimeter = " + shapes[i].perimeter() ); | |
| } | |
| // Notice how the area() and perimeter() functions really | |
| // invoke the appropriate virtual method on each object. | |
| // ----- Delete everything ----- | |
| Console.WriteLine( "\nGuess I'll clean up now" ); | |
| } | |
| // Note: when this using scope is exited the C# Dispose() methods | |
| // are called which in turn call the C++ destructors | |
| Console.WriteLine( Shape.nshapes + " shapes remain" ); | |
| Console.WriteLine( "Goodbye" ); | |
| } | |
| } |