Demonstrate the use of a nested class to contain data
/*
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));
}
}
}
}