/*
C# Programming Tips & Techniques
by Charles Wright, Kris Jamsa
Publisher: Osborne/McGraw-Hill (December 28, 2001)
ISBN: 0072193794
*/
//
// Nested.cs -- demonstrate the use of a nested class to contain data
//
// Compile this program with the following command line
// C:>csc Nested.cs
//
namespace nsReadOnly
{
using System;
public class Nested
{
static double DegreeFactor = 1;
static double MilFactor = 0.05625;
static double RadianFactor = 57.29578;
static public void Main ()
{
double angle = 90;
double radius = 50;
// Declare an instance of the nested class
clsArea.clsData data = new clsArea.clsData (angle, radius,
DegreeFactor);
clsArea InDegrees = new clsArea (data);
// Change the values to mils
data.Factor = MilFactor;
data.Angle = angle * 17.77778;
clsArea InMils = new clsArea (data);
// Change the values to radians
data.Angle = angle / 57.29578;
data.Factor = RadianFactor;
clsArea InRadians = new clsArea (data);
Console.WriteLine ("Area of pie of {0,0:F3} degrees is {1,0:F1}",
InDegrees.Data.Angle, InDegrees.Area);
Console.WriteLine ("Area of pie of {0,0:F3} radians is {1,0:F1}",
InRadians.Data.Angle, InRadians.Area);
Console.WriteLine ("Area of pie of {0,0:F3} mils is {1,0:F1}",
InMils.Data.Angle, InMils.Area);
}
}
class clsArea
{
public class clsData : ICloneable
{
public clsData (double angle, double radius, double factor)
{
m_Angle = angle;
m_Radius = radius;
m_Factor = factor / 57.29578;
}
public double Angle
{
get {return(m_Angle);}
set {m_Angle = value;}
}
public double Radius
{
get {return(m_Radius);}
set {m_Radius = value;}
}
public double Factor
{
get {return(m_Factor);}
set {m_Factor = value / 57.29578;}
}
private double m_Angle = 0;
private double m_Radius = 0;
private double m_Factor = 1;
public object Clone ()
{
clsData clone = new clsData (m_Angle, m_Radius,
m_Factor * 57.29578);
return (clone);
}
}
public clsArea (clsData data)
{
// Clone the data object to get a copy for ourselves
m_Data = (clsData) data.Clone();
}
public clsData Data
{
get {return (m_Data);}
}
private clsData m_Data;
private const double pi = 3.14159;
private const double radian = 57.29578;
public double Area
{
get
{
return (m_Data.Radius * m_Data.Radius * pi
* m_Data.Angle * m_Data.Factor / (2 * pi));
}
}
}
}
Month: February 2011
Multiple constructors in a class definition
/*
C# Programming Tips & Techniques
by Charles Wright, Kris Jamsa
Publisher: Osborne/McGraw-Hill (December 28, 2001)
ISBN: 0072193794
*/
// Constrct.cs - Demonstrates the use of multiple constructors
// in a class definition.
//
// Compile this program with the following command line:
// C:>csc Constrct.cs
//
namespace nsConstructor
{
using System;
struct POINT
{
public POINT (int cx, int cy)
{
this.cx = cx;
this.cy = cy;
}
public int cx;
public int cy;
}
public class Constrct
{
static public void Main ()
{
clsRect rc1 = new clsRect();
clsRect rc2 = new clsRect (10, 12, 84, 96);
POINT pt1 = new POINT (10, 12);
POINT pt2 = new POINT (84, 96);
clsRect rc3 = new clsRect (pt1, pt2);
}
}
class clsRect
{
// The following constructor replaces the default constructor
public clsRect ()
{
Console.WriteLine ("Default constructor called");
m_Left = m_Top = m_Right = m_Bottom = 0;
}
public clsRect (int cx1, int cy1, int cx2, int cy2)
{
Console.WriteLine ("Constructor 1 called");
m_Left = cx1;
m_Top = cy1;
m_Right = cx2;
m_Bottom = cy2;
}
public clsRect (POINT pt1, POINT pt2)
{
Console.WriteLine ("Constructor 2 called");
m_Left = pt1.cx;
m_Top = pt1.cy;
m_Right = pt2.cx;
m_Bottom = pt2.cy;
}
public POINT UpperLeft
{
get {return(new POINT(m_Left, m_Top));}
set {m_Left = value.cx; m_Top = value.cy;}
}
public POINT LowerRight
{
get {return(new POINT(m_Right, m_Bottom));}
set {m_Right = value.cx; m_Bottom = value.cy;}
}
private int m_Left;
private int m_Top;
private int m_Right;
private int m_Bottom;
}
}
Illustrates nested classes
/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy
Publisher: Sybex;
ISBN: 0782129110
*/
/*
Example6_6.cs illustrates nested classes
*/
// declare the Car class
class Car
{
// declare the Engine class
public class Engine
{
// declare the Engine fields
public int cylinders;
public int horsepower;
// define the Engine method
public void Start()
{
System.Console.WriteLine("Engine started");
}
}
// declare the Car fields
public string make;
public Engine engine; // Car has an Engine
// define the Car method
public void Start()
{
engine.Start();
}
}
public class Example6_6
{
public static void Main()
{
// declare a Car object reference named myCar
System.Console.WriteLine("Creating a Car object");
Car myCar = new Car();
myCar.make = "Toyota";
// Car objects have an Engine object
System.Console.WriteLine("Creating an Engine object");
myCar.engine = new Car.Engine();
myCar.engine.cylinders = 4;
myCar.engine.horsepower = 180;
// display the values for the Car and Engine object fields
System.Console.WriteLine("myCar.make = " + myCar.make);
System.Console.WriteLine("myCar.engine.cylinders = " +
myCar.engine.cylinders);
System.Console.WriteLine("myCar.engine.horsepower = " +
myCar.engine.horsepower);
// call the Car object's Start() method
myCar.Start();
}
}
illustrates how to use a 'has a' relationship
/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy
Publisher: Sybex;
ISBN: 0782129110
*/
/*
Example6_5.cs illustrates how to use a "has a"
relationship
*/
// declare the Engine class
class Engine
{
// declare the fields
public int cylinders;
public int horsepower;
// define the method
public void Start()
{
System.Console.WriteLine("Engine started");
}
}
// declare the Car class
class Car
{
// declare the fields
public string make;
public Engine engine; // Car has an Engine
// define the method
public void Start()
{
engine.Start();
}
}
public class Example6_5
{
public static void Main()
{
// declare a Car object reference named myCar
System.Console.WriteLine("Creating a Car object");
Car myCar = new Car();
myCar.make = "Toyota";
// Car objects have an Engine object
System.Console.WriteLine("Creating an Engine object");
myCar.engine = new Engine();
myCar.engine.cylinders = 4;
myCar.engine.horsepower = 180;
// display the values for the Car and Engine object fields
System.Console.WriteLine("myCar.make = " + myCar.make);
System.Console.WriteLine("myCar.engine.cylinders = " +
myCar.engine.cylinders);
System.Console.WriteLine("myCar.engine.horsepower = " +
myCar.engine.horsepower);
// call the Car object's Start() method
myCar.Start();
}
}
Illustrates how to assign default values to fields using initializers
/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy
Publisher: Sybex;
ISBN: 0782129110
*/
/*
Example5_2.cs illustrates how to assign default values
to fields using initializers
*/
// declare the Car class
class Car
{
// declare the fields
public string make = "Ford";
public string model = "T";
public string color; // default value of null
public int yearBuilt = 1910;
// define the methods
public void Start()
{
System.Console.WriteLine(model + " started");
}
public void Stop()
{
System.Console.WriteLine(model + " stopped");
}
}
public class Example5_2
{
public static void Main()
{
// create a Car object
Car myCar = new Car();
// display the default values for the Car object fields
System.Console.WriteLine("myCar.make = " + myCar.make);
System.Console.WriteLine("myCar.model = " + myCar.model);
if (myCar.color == null)
{
System.Console.WriteLine("myCar.color is null");
}
System.Console.WriteLine("myCar.yearBuilt = " + myCar.yearBuilt);
}
}
Illustrates how to declare classes, object references, and create objects
/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy
Publisher: Sybex;
ISBN: 0782129110
*/
/*
Example5_1.cs illustrates how to declare
classes, object references, and create objects
*/
// declare the Car class
class Car
{
// declare the fields
public string make;
public string model;
public string color;
public int yearBuilt;
// define the methods
public void Start()
{
System.Console.WriteLine(model + " started");
}
public void Stop()
{
System.Console.WriteLine(model + " stopped");
}
}
public class Example5_1
{
public static void Main()
{
// declare a Car object reference named myCar
Car myCar;
// create a Car object, and assign its address to myCar
System.Console.WriteLine("Creating a Car object and assigning " +
"its memory location to myCar");
myCar = new Car();
// assign values to the Car object's fields using myCar
myCar.make = "Toyota";
myCar.model = "MR2";
myCar.color = "black";
myCar.yearBuilt = 1995;
// display the field values using myCar
System.Console.WriteLine("myCar details:");
System.Console.WriteLine("myCar.make = " + myCar.make);
System.Console.WriteLine("myCar.model = " + myCar.model);
System.Console.WriteLine("myCar.color = " + myCar.color);
System.Console.WriteLine("myCar.yearBuilt = " + myCar.yearBuilt);
// call the methods using myCar
myCar.Start();
myCar.Stop();
// declare another Car object reference and
// create another Car object
System.Console.WriteLine("Creating another Car object and " +
"assigning its memory location to redPorsche");
Car redPorsche = new Car();
redPorsche.make = "Porsche";
redPorsche.model = "Boxster";
redPorsche.color = "red";
redPorsche.yearBuilt = 2000;
System.Console.WriteLine("redPorsche is a " + redPorsche.model);
// change the object referenced by the myCar object reference
// to the object referenced by redPorshe
System.Console.WriteLine("Assigning redPorsche to myCar");
myCar = redPorsche;
System.Console.WriteLine("myCar details:");
System.Console.WriteLine("myCar.make = " + myCar.make);
System.Console.WriteLine("myCar.model = " + myCar.model);
System.Console.WriteLine("myCar.color = " + myCar.color);
System.Console.WriteLine("myCar.yearBuilt = " + myCar.yearBuilt);
// assign null to myCar (myCar will no longer reference an object)
myCar = null;
}
}
Declare class and use it
/*
C#: The Complete Reference
by Herbert Schildt
Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/
using System;
class Rect {
public int width;
public int height;
public Rect(int w, int h) {
width = w;
height = h;
}
public int area() {
return width * height;
}
}
public class UseRect {
public static void Main() {
Rect r1 = new Rect(4, 5);
Rect r2 = new Rect(7, 9);
Console.WriteLine("Area of r1: " + r1.area());
Console.WriteLine("Area of r2: " + r2.area());
}
}

