/* 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)); } } } }