Conversions Between Structs 2 : struct « Class Interface « C# / C Sharp






Conversions Between Structs 2


/*
A Programmer's Introduction to C# (Second Edition)
by Eric Gunnerson

Publisher: Apress  L.P.
ISBN: 1-893115-62-3
*/

// 24 - User-Defined Conversions\Conversions Between Structs
// copyright 2000 Eric Gunnerson
using System;
using System.Text;
struct RomanNumeral
{
    public RomanNumeral(short value) 
    {
        if (value > 5000)
        throw(new ArgumentOutOfRangeException());
        
        this.value = value;
    }
    public static explicit operator RomanNumeral(
    short value) 
    {
        RomanNumeral    retval;
        retval = new RomanNumeral(value);
        return(retval);
    }
    
    public static implicit operator short(
    RomanNumeral roman)
    {
        return(roman.value);
    }
    
    static string NumberString(
    ref int value, int magnitude, char letter)
    {
        StringBuilder    numberString = new StringBuilder();
        
        while (value >= magnitude)
        {
            value -= magnitude;
            numberString.Append(letter);
        }
        return(numberString.ToString());
    }
    
    public static implicit operator string(
    RomanNumeral roman)
    {
        int        temp = roman.value;
        
        StringBuilder retval = new StringBuilder();
        
        retval.Append(RomanNumeral.NumberString(ref temp, 1000, 'M'));
        retval.Append(RomanNumeral.NumberString(ref temp, 500, 'D'));
        retval.Append(RomanNumeral.NumberString(ref temp, 100, 'C'));
        retval.Append(RomanNumeral.NumberString(ref temp, 50, 'L'));
        retval.Append(RomanNumeral.NumberString(ref temp, 10, 'X'));
        retval.Append(RomanNumeral.NumberString(ref temp, 5, 'V'));
        retval.Append(RomanNumeral.NumberString(ref temp, 1, 'I'));
        
        return(retval.ToString());
    }
    
    private short value;
}
struct BinaryNumeral
{
    public BinaryNumeral(int value) 
    {
        this.value = value;
    }
    public static implicit operator BinaryNumeral(
    int value) 
    {
        BinaryNumeral    retval = new BinaryNumeral(value);
        return(retval);
    }
    
    public static implicit operator int(
    BinaryNumeral binary)
    {
        return(binary.value);
    }
    
    public static implicit operator string(
    BinaryNumeral binary)
    {
        StringBuilder    retval = new StringBuilder();
        
        return(retval.ToString());
    }
    
    private int value;
}

public class ConversionsBetweenStructs1
{
    public static void Main()
    {
        RomanNumeral    roman = new RomanNumeral(12);
        BinaryNumeral    binary;
        binary = (BinaryNumeral)(int)roman;
    }
}
           
       








Related examples in the same category

1.Structs And Enums
2.Define struct and use it
3.Demonstrate a structureDemonstrate a structure
4.Copy a structCopy a struct
5.Structures are good when grouping dataStructures are good when grouping data
6.demonstrates a custom constructor function for a structuredemonstrates a custom constructor function for a structure
7.Defining functions for structs
8.demonstrates using a structure to return a group of variables from a functiondemonstrates using a structure to return a group of variables from a function
9.Demonstates assignment operator on structures and classes.Demonstates assignment operator on structures and classes.
10.Issue an error message if you do not initialize all of the fields in a structure
11.Illustrates the use of a structIllustrates the use of a struct
12.C# always creates a structure instance as a value-type variable even using the new operatorC# always creates a structure instance as a value-type variable even using the new operator
13.Calling a Function with a Structure ParameterCalling a Function with a Structure Parameter
14.Structs (Value Types):A Point StructStructs (Value Types):A Point Struct
15.Structs (Value Types):Structs and ConstructorsStructs (Value Types):Structs and Constructors
16.Conversions Between Structs 1