C# always creates a structure instance as a value-type variable even using the new operator

image_pdfimage_print

   

/*
C# Programming Tips & Techniques
by Charles Wright, Kris Jamsa

Publisher: Osborne/McGraw-Hill (December 28, 2001)
ISBN: 0072193794
*/
//
//  ValType.cs -- Demonstrates that C# always creates a structure instance as
//                a value-type variable even using the new operator.
//                Compile this program using the following command line:
//                    C:>csc ValType.cs
//
namespace nsValType
{
    using System;
    public struct POINT
    {
        public int  cx;
        public int  cy;
    }
    public class ValType
    {
        static public void Main()
        {
            POINT point1;
            point1.cx = 42;
            point1.cy = 56;
            ModifyPoint (point1);
            Console.WriteLine ("In Main() point2 = ({0}, {1})", point1.cx, point1.cy);
            POINT point2 = new POINT ();
            
            // point2.cx = 42;
            // point2.cy = 56;
            
            Console.WriteLine ();
            ModifyPoint (point2);
            Console.WriteLine ("In Main() point2 = ({0}, {1})", point2.cx, point2.cy);
        }
        static public void ModifyPoint (POINT pt)
        {
            pt.cx *= 2;
            pt.cy *= 2;
            Console.WriteLine ("In ModifyPoint() pt = ({0}, {1})", pt.cx, pt.cy);
        }
    }
}



           
          


Illustrates the use of a struct

image_pdfimage_print

   

/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy

Publisher: Sybex;
ISBN: 0782129110
*/

/*
  Example5_15.cs illustrates the use of a struct
*/


// declare the Rectangle struct
struct Rectangle
{

  // declare the fields
  public int Width;
  public int Height;

  // define a constructor
  public Rectangle(int Width, int Height)
  {
    this.Width = Width;
    this.Height = Height;
  }

  // define the Area() method
  public int Area()
  {
    return Width * Height;
  }

}


public class Example5_15
{

  public static void Main()
  {

    // create an instance of a Rectangle
    System.Console.WriteLine("Creating a Rectangle instance");
    Rectangle myRectangle = new Rectangle(2, 3);

    // display the values for the Rectangle instance
    System.Console.WriteLine("myRectangle.Width = " + myRectangle.Width);
    System.Console.WriteLine("myRectangle.Height = " + myRectangle.Height);

    // call the Area() method of the Rectangle instance
    System.Console.WriteLine("myRectangle.Area() = " + myRectangle.Area());

  }

}

           
          


Issue an error message if you do not initialize all of the fields in a structure

image_pdfimage_print
   

/*
C# Programming Tips & Techniques
by Charles Wright, Kris Jamsa

Publisher: Osborne/McGraw-Hill (December 28, 2001)
ISBN: 0072193794
*/

//
//  Struct.cs - Issue an error message if you do not initialize all of
//              the fields in  a structure
//
//               Compile this program with the following command line:
//                   C:>csc Struct.cs
//
using System;

namespace nsStruct
{
    struct POINT
    {
        public int cx;
        public int cy;
        public int var;
        public override string ToString ()
        {
            return ("(" + cx + ", " + cy + ")");
        }
    }
    public class StructDemo2
    {
        static public void Main ()
        {
            POINT pt;
            pt.cx = 24;
            pt.cy = 42;
            Console.WriteLine (pt);
//            Console.WriteLine ("(" + pt.cx + ", " + pt.cy + ")");
        }
    }
}

           
          


Demonstates assignment operator on structures and classes.

image_pdfimage_print

   

/*
C# Programming Tips & Techniques
by Charles Wright, Kris Jamsa

Publisher: Osborne/McGraw-Hill (December 28, 2001)
ISBN: 0072193794
*/

//
//  CmpStCls.cs -- Demonstates assignment operator on structures and classes.
//                 Compile this program with the following command line:
//                     C:>csc CmpStCls.cs
//
namespace nsCompare
{
    using System;
//
// Define a structure containing the x and y coordinates of a point
    struct stPoint
    {
        public int cx;
        public int cy;
    }
//
// Define a class containing the x and y coordinates of a point
    class clsPoint
    {
        public int cx;
        public int cy;
    }
    public class CmpStCls
    {
        static public void Main ()
        {
// Declare two structure variables
            stPoint spt1, spt2;
// Initialize the members of only one structure
            spt1.cx = 42;
            spt1.cy = 24;
// Assign the first structure to the first
            spt2 = spt1;
// Now modify the first structure
            spt1.cx = 12;
            spt1.cy = 18;
// Show the results
            Console.WriteLine ("For structures:");
            Console.WriteLine ("	The point for spt1 is ({0}, {1})", spt1.cx, spt1.cy);
            Console.WriteLine ("	The point for spt2 is ({0}, {1})", spt2.cx, spt2.cy);

// Now do the same thing with instances of the class
            clsPoint cpt1, cpt2;
            cpt1 = new clsPoint();
// Initialize the members of only one class instance
            cpt1.cx = 42;
            cpt1.cy = 24;
// Assign the first class instance to the second
            cpt2 = cpt1;
// Modify the first class
            cpt1.cx = 12;
            cpt2.cy = 18;
// Show the results
            Console.WriteLine ("
For structures:");
            Console.WriteLine ("	The point for cpt1 is ({0}, {1})", cpt1.cx, cpt1.cy);
            Console.WriteLine ("	The point for cpt2 is ({0}, {1})", cpt2.cx, cpt2.cy);
        }
    }
}

           
          


demonstrates using a structure to return a group of variables from a function

image_pdfimage_print

   

/*
C# Programming Tips & Techniques
by Charles Wright, Kris Jamsa

Publisher: Osborne/McGraw-Hill (December 28, 2001)
ISBN: 0072193794
*/

//  tm.cs - demonstrates using a structure to return a group of variables
//          from a function
//
//          Compile this program using the following command line:
//              D:>csc tm.cs
//
namespace nsStructure
{
    using System;
    using System.Globalization;
    public struct tm
    {
        public int tm_sec;       // Seconds after the minute
        public int tm_min;       // Minutes after the hour 
        public int tm_hour;      // Hours since midnight
        public int tm_mday;      // The day of the month
        public int tm_mon;       // The month (January = 0)
        public int tm_year;      // The year (00 = 1900)
        public int tm_wday;      // The day of the week (Sunday = 0)
        public int tm_yday;      // The day of the year (Jan. 1 = 1)
        public int tm_isdst;     // Flag to indicate if DST is in effect
    }
    public class tmDemo
    {
        static public void Main()
        {
            DateTime timeVal = DateTime.Now;
            tm tmNow = LocalTime (timeVal);
            string strTime = AscTime (tmNow);
            Console.WriteLine (strTime);
        }
        static public tm LocalTime(DateTime tmVal)
        {
            tm time;
            time.tm_sec = tmVal.Second;
            time.tm_min = tmVal.Minute;
            time.tm_hour = tmVal.Hour;
            time.tm_mday = tmVal.Day;
            time.tm_mon = tmVal.Month - 1;
            time.tm_year = tmVal.Year - 1900;
            time.tm_wday = (int) tmVal.DayOfWeek;
            time.tm_yday = tmVal.DayOfYear;
            TimeZone tz = TimeZone.CurrentTimeZone;
            time.tm_isdst = tz.IsDaylightSavingTime (tmVal) == true ? 1 : 0;
            return (time);
        }
//
//  Returns a string representing a time using UNIX format
        static public string AscTime (tm time)
        {
            const string wDays = "SunMonTueWedThuFriSat";
            const string months = "JanFebMarAprMayJunJulAugSepOctNovDec";
            string strTime = String.Format ("{0} {1} {2,2:00} " + 
                            "{3,2:00}:{4,2:00}:{5,2:00} {6}
", 
                             wDays.Substring (3 * time.tm_wday, 3),
                             months.Substring (3 * time.tm_mon, 3),
                             time.tm_mday, time.tm_hour,
                             time.tm_min, time.tm_sec, time.tm_year + 1900);
            return (strTime);
        }
    }
}

           
          


demonstrates a custom constructor function for a structure

image_pdfimage_print

   

/*
C# Programming Tips & Techniques
by Charles Wright, Kris Jamsa

Publisher: Osborne/McGraw-Hill (December 28, 2001)
ISBN: 0072193794
*/
//  tm2.cs - demonstrates a custom constructor function for a structure
//           Compile this program using the following command line:
//               D:>csc tm2.cs
//
namespace nsStructure
{
    using System;
    using System.Globalization;
    struct tm
    {
        public tm (DateTime tmVal)
        {
            tm_sec = tmVal.Second;
            tm_min = tmVal.Minute;
            tm_hour = tmVal.Hour;
            tm_mday = tmVal.Day;
            tm_mon = tmVal.Month - 1;
            tm_year = tmVal.Year - 1900;
            tm_wday = (int) tmVal.DayOfWeek;
            tm_yday = tmVal.DayOfYear;
            TimeZone tz = TimeZone.CurrentTimeZone;
            tm_isdst = tz.IsDaylightSavingTime (tmVal) == true ? 1 : 0;
        }
        public int tm_sec;       // Seconds after the minute
        public int tm_min;       // Minutes after the hour 
        public int tm_hour;      // Hours since midnight
        public int tm_mday;      // The day of the month
        public int tm_mon;       // The month (January = 0)
        public int tm_year;      // The year (00 = 1900)
        public int tm_wday;      // The day of the week (Sunday = 0)
        public int tm_yday;      // The day of the year (Jan. 1 = 1)
        public int tm_isdst;     // Flag to indicate if DST is in effect
        public override string ToString()
        {
            const string wDays = "SunMonTueWedThuFriSat";
            const string months = "JanFebMarAprMayJunJulAugSepOctNovDec";
            return (String.Format ("{0} {1} {2,2:00} " + 
                            "{3,2:00}:{4,2:00}:{5,2:00} {6}
", 
                             wDays.Substring (3 * tm_wday, 3),
                             months.Substring (3 * tm_mon, 3),
                             tm_mday, tm_hour, tm_min,
                             tm_sec, tm_year + 1900));
        }
    }
    public class tm2Demo
    {
        static public void Main()
        {
            DateTime timeVal = DateTime.Now;
            tm tmNow = new tm (timeVal);
            Console.WriteLine (tmNow);
        }
    }
}