User-Defined Conversions:A Simple Example : Casting Conversions « Data Types « C# / C Sharp

Home
C# / C Sharp
1.2D Graphics
2.Class Interface
3.Collections Data Structure
4.Components
5.Data Types
6.Database ADO.net
7.Design Patterns
8.Development Class
9.Event
10.File Stream
11.Generics
12.GUI Windows Form
13.Language Basics
14.LINQ
15.Network
16.Office
17.Reflection
18.Regular Expressions
19.Security
20.Services Event
21.Thread
22.Web Services
23.Windows
24.Windows Presentation Foundation
25.XML
26.XML LINQ
C# / C Sharp by API
C# / CSharp Tutorial
C# / CSharp Open Source
C# / C Sharp » Data Types » Casting ConversionsScreenshots 
User-Defined Conversions:A Simple Example
User-Defined Conversions:A Simple Example
  

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

Publisher: Apress  L.P.
ISBN: 1-893115-62-3
*/
// 24 - User-Defined Conversions\A Simple Example
// 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;
}

public class UserDefinedConversionsASimpleExample
{
    public static void Main()
    {
        short s = 12;
        RomanNumeral numeral = new RomanNumeral(s);
        
        s = 165;
        numeral = (RomanNumerals;
        
        Console.WriteLine("Roman as int: {0}"(int)numeral);
        Console.WriteLine("Roman as string: {0}"(string)numeral);
        
        short s2 = numeral;
    }
}

           
         
    
  
Related examples in the same category
1.An example that uses an implicit conversion operatorAn example that uses an implicit conversion operator
2.Use an explicit conversionUse an explicit conversion
3.illustrates casting objectsillustrates casting objects
4.The use of the cast operatorThe use of the cast operator
5.Casting int float and byte
6.User-Defined Conversions: How It Works: Conversion Lookup
7.Conversions: Numeric Types
8.Numeric Types: Checked Conversions
9.Conversions:Numeric Types:Checked Conversions
10.Conversions:Numeric Types:Conversions and Member LookupConversions:Numeric Types:Conversions and Member Lookup
11.Conversions:Numeric Types:Explicit Numeric ConversionsConversions:Numeric Types:Explicit Numeric Conversions
12.Conversions of Classes (Reference Types)\To an Interface the Object Might ImplementConversions of Classes (Reference Types)\To an Interface   the Object Might Implement
13.Conversions of Classes (Reference Types):To the Base Class of an ObjectConversions of Classes (Reference Types):To the Base Class of an Object
14.Classes and Pre and Post Conversions
15.Conversion Lookup
16.InvalidCastException
17.NumberStyles.Integer
18.NumberStyles.None
19.NumberStyles.Integer | NumberStyles.AllowDecimalPoint
20.NumberStyles.Integer | NumberStyles.AllowDecimalPoint
21.NumberStyles.Integer | NumberStyles.AllowThousands
22.NumberStyles.Integer | NumberStyles.AllowExponent
23.NumberStyles.HexNumber
24.Converts String to Any Other Type
25.Convert To Int 32
26.Converts a number value into a string that represents the number expressed in whole kilobytes.
27.Converts a numeric value into number expressed as a size value in bytes, kilobytes, megabytes, gigabytes, or terabytes depending on the size.
28.Returns a System.String representation of the value object
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.