/*
* C# Programmers Pocket Consultant
* Author: Gregory S. MacBeth
* Email: gmacbeth@comporium.net
* Create Date: June 27, 2003
* Last Modified Date:
* Version: 1
*/
using System;
namespace Client.Chapter_1___Common_Type_System
{
public class Casting
{
static void Main(string[] args)
{
int MyInt = 12345;
long MyLong = MyInt;
short MyShort = (short)MyInt;
}
}
}
ASP.NET & Csharp (C#)
ASP.NET & Csharp (C#) , Here you can find my posts about .NET c# .
The use of the cast operator
/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy
Publisher: Sybex;
ISBN: 0782129110
*/
/*
Example2_3.cs shows the use of the cast operator,
and how information loss can occur when explicitly
converting a variable of one type to another
*/
public class Example2_3
{
public static void Main()
{
short myShort = 17000;
System.Console.WriteLine("myShort = " + myShort);
int myInt = myShort;
System.Console.WriteLine("myInt = " + myInt);
myShort = (short) (myInt * 2);
System.Console.WriteLine("myShort = " + myShort);
}
}
illustrates casting objects
/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy
Publisher: Sybex;
ISBN: 0782129110
*/
/*
Example7_11.cs illustrates casting objects
*/
using System;
// declare the MotorVehicle class (the base class)
class MotorVehicle
{
public string model;
public MotorVehicle(string model)
{
this.model = model;
}
public void Start()
{
Console.WriteLine(model + " started");
}
}
// declare the Car class
class Car : MotorVehicle
{
public bool convertible;
public Car(string model, bool convertible) :
base(model)
{
this.convertible = convertible;
}
}
// declare the Motorcycle class
class Motorcycle : MotorVehicle
{
public bool sidecar;
// define a constructor
public Motorcycle(string model, bool sidecar) :
base(model)
{
this.sidecar = sidecar;
}
public void PullWheelie()
{
Console.WriteLine(model + " pulling a wheelie!");
}
}
public class Example7_11
{
public static void Main()
{
// create a Car object
Car myCar = new Car("MR2", true);
// cast myCar to MotorVehicle (upcast)
MotorVehicle myMotorVehicle = (MotorVehicle) myCar;
// myMotorVehicle only has a model field and Start() method
// (no convertible field)
Console.WriteLine("myMotorVehicle.model = " + myMotorVehicle.model);
myMotorVehicle.Start();
// Console.WriteLine("myMotorVehicle.convertible = " +
// myMotorVehicle.convertible);
// create a Motorcycle object
Motorcycle myMotorcycle = new Motorcycle("V-Rod", true);
// cast myMotorcycle to MotorVehicle (upcast)
MotorVehicle myMotorVehicle2 = (MotorVehicle) myMotorcycle;
// myMotorVehicle only has a model field and Start() method
// (no sidecar field or PullWheelie() method)
Console.WriteLine("myMotorVehicle2.model = " + myMotorVehicle2.model);
myMotorVehicle2.Start();
// Console.WriteLine("myMotorVehicle2.sidecar = " +
// myMotorVehicle2.sidecar);
// myMotorVehicle2.PullWheelie();
// cast myMotorVehicle2 to Motorcycle (downcast)
Motorcycle myMotorcycle2 = (Motorcycle) myMotorVehicle2;
// myMotorCycle2 has access to all members of the Motorcycle class
Console.WriteLine("myMotorcycle2.model = " + myMotorcycle2.model);
Console.WriteLine("myMotorcycle2.sidecar = " + myMotorcycle2.sidecar);
myMotorcycle2.Start();
myMotorcycle2.PullWheelie();
// cannot cast a Motorcyle object to the Car class because
// their classes are not compatible
// Car myCar2 = (Car) myMotorVehicle2;
}
}
Use an explicit conversion
/*
C#: The Complete Reference
by Herbert Schildt
Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/
// Use an explicit conversion.
using System;
// A three-dimensional coordinate class.
class ThreeD {
int x, y, z; // 3-D coordinates
public ThreeD() { x = y = z = 0; }
public ThreeD(int i, int j, int k) { x = i; y = j; z = k; }
// Overload binary +.
public static ThreeD operator +(ThreeD op1, ThreeD op2)
{
ThreeD result = new ThreeD();
result.x = op1.x + op2.x;
result.y = op1.y + op2.y;
result.z = op1.z + op2.z;
return result;
}
// This is now explicit.
public static explicit operator int(ThreeD op1)
{
return op1.x * op1.y * op1.z;
}
// Show X, Y, Z coordinates.
public void show()
{
Console.WriteLine(x + ", " + y + ", " + z);
}
}
public class ThreeDDemo7 {
public static void Main() {
ThreeD a = new ThreeD(1, 2, 3);
ThreeD b = new ThreeD(10, 10, 10);
ThreeD c = new ThreeD();
int i;
Console.Write("Here is a: ");
a.show();
Console.WriteLine();
Console.Write("Here is b: ");
b.show();
Console.WriteLine();
c = a + b; // add a and b together
Console.Write("Result of a + b: ");
c.show();
Console.WriteLine();
i = (int) a; // explicitly convert to int -- cast required
Console.WriteLine("Result of i = a: " + i);
Console.WriteLine();
i = (int)a * 2 - (int)b; // casts required
Console.WriteLine("result of a * 2 - b: " + i);
}
}
An example that uses an implicit conversion operator
/*
C#: The Complete Reference
by Herbert Schildt
Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/
// An example that uses an implicit conversion operator.
using System;
// A three-dimensional coordinate class.
class ThreeD {
int x, y, z; // 3-D coordinates
public ThreeD() { x = y = z = 0; }
public ThreeD(int i, int j, int k) { x = i; y = j; z = k; }
// Overload binary +.
public static ThreeD operator +(ThreeD op1, ThreeD op2)
{
ThreeD result = new ThreeD();
result.x = op1.x + op2.x;
result.y = op1.y + op2.y;
result.z = op1.z + op2.z;
return result;
}
// An implicit conversion from ThreeD to int.
public static implicit operator int(ThreeD op1)
{
return op1.x * op1.y * op1.z;
}
// Show X, Y, Z coordinates.
public void show()
{
Console.WriteLine(x + ", " + y + ", " + z);
}
}
public class ThreeDDemo5 {
public static void Main() {
ThreeD a = new ThreeD(1, 2, 3);
ThreeD b = new ThreeD(10, 10, 10);
ThreeD c = new ThreeD();
int i;
Console.Write("Here is a: ");
a.show();
Console.WriteLine();
Console.Write("Here is b: ");
b.show();
Console.WriteLine();
c = a + b; // add a and b together
Console.Write("Result of a + b: ");
c.show();
Console.WriteLine();
i = a; // convert to int
Console.WriteLine("Result of i = a: " + i);
Console.WriteLine();
i = a * 2 - b; // convert to int
Console.WriteLine("result of a * 2 - b: " + i);
}
}
explicit cast
using System;
class ExplicitConv {
static void Main() {
double a = 5.654321;
int b;
b = (int)a;
Console.WriteLine("The value is {0}", b);
}
}
Implicit cast
using System;
class ImplicitConversion {
public static void Main() {
byte a = 1;
int b = 1234;
int c = a; //Implicit cast
double d = b; //Implicit cast
Console.WriteLine("{0}", c);
Console.WriteLine("{0}", d);
}
}