Classes and Pre and Post Conversions : Casting Conversions « Language Basics « C# / C Sharp

C# / C Sharp
1. 2D Graphics
2. Collections Data Structure
3. Components
4. Database ADO.net
5. Development Class
6. Event
7. File Stream
8. GUI Windows Form
9. Language Basics
10. Network
11. Office
12. Regular Expressions
13. Services Event
14. Thread
15. Web Services
16. Windows
17. XML
Microsoft Office Word 2007 Tutorial
Java
Java Tutorial
Java Source Code / Java Documentation
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
C# / CSharp Tutorial
ASP.Net
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
PHP
Python
SQL Server / T-SQL
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
C# / C Sharp » Language Basics » Casting ConversionsScreenshots 
Classes and Pre and Post Conversions


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

Publisher: Apress  L.P.
ISBN: 1-893115-62-3
*/
// 24 - User-Defined Conversions\Classes and Pre and Post Conversions
// copyright 2000 Eric Gunnerson
using System;
using System.Text;

public class ClassesandPreandPostConversions
{
    public static void Main()
    {
        // implicit conversion section
        RomanNumeralAlternate    roman;
        roman = new RomanNumeralAlternate(55);
        
        BinaryNumeral binary = roman;
        // explicit conversion section
        BinaryNumeral binary2 = new BinaryNumeral(1500);
        RomanNumeralAlternate roman2;
        
        roman2 = (RomanNumeralAlternatebinary2;
    }
}

class 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());
    }
    public static implicit operator BinaryNumeral(RomanNumeral roman)
    {
        return(new BinaryNumeral((shortroman));
    }
    
    public static explicit operator RomanNumeral(
    BinaryNumeral binary)
    {
        return(new RomanNumeral((short)(intbinary));
    }
    
    private short value;
}
class 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;
}
class RomanNumeralAlternate : RomanNumeral
{
    public RomanNumeralAlternate(short value): base(value)
    {
    }
    
    public static implicit operator string(
    RomanNumeralAlternate roman)
    {
        return("NYI");
    }
}


           
       
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. User-Defined Conversions:A Simple ExampleUser-Defined Conversions:A Simple Example
15. Conversion Lookup
w_ww___.__j__a_v___a___2__s___._c___o_m___ | Contact Us
Copyright 2003 - 08 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.