类型转换就是把数据从一种类型转换为另一种类型。在 C# 中,类型转换有两种形式:
下面的实例显示了一个显式的类型转换:
namespace TypeConversionApplication
{
class ExplicitConversion
{
static void Main(string[] args)
{
double d = 5673.74;
int i;
// 强制转换 double 为 int
i = (int)d;
Console.WriteLine(i);
Console.ReadKey();
}
}
}
C#提供了一系列内置的类型转换方法:
重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个函数完成不同的功能。这就是重载函数。
重载函数常用来实现功能类似而所处理的数据类型不同的问题。不能只有函数返回值类型不同。
您可以重定义或重载 C# 中内置的运算符。
因此,程序员也可以使用用户自定义类型的运算符。
运算符重载的其实就是函数重载。首先通过指定的运算表达式调用对应的运算符函数,然后再将运算对象转化为运算符函数的实参,接着根据实参的类型来确定需要调用的函数的重载,这个过程是由编译器完成。
重载运算符是具有特殊名称的函数,是通过关键字 operator
后跟运算符的符号来定义的。与其他函数一样,重载运算符有返回类型和参数列表。
operator
关键字用于在类或结构声明中声明运算符。运算符声明可以采用下列四种形式之一:
//重载内置运算符
public static result-type operator unary-operator ( op-type operand )
public static result-type operator binary-operator ( op-type operand, op-type2 operand2 )
//转换运算符
//隐式类型转换
public static implicit operator conv-type-out ( conv-type-in operand )
//显式类型转换
public static explicit operator conv-type-out ( conv-type-in operand )
前两种形式声明了用户定义的重载内置运算符的运算符。后两种形式声明了转换运算符。
参数:
public static result-type operator binary-operator ( op-type operand, op-type2 operand2 )
根据第二种声明方式,编码如下:
重载加法运算符,两个参数都是Box类型,返回值也是Box类型。
public static Box operator+ (Box b, Box c)
{
Box box = new Box();
box.length = b.length + c.length;
box.breadth = b.breadth + c.breadth;
box.height = b.height + c.height;
return box;
}
调用重载的运算符:
Box box1 = new Box();
Box box2 = new Box();
Box box3 = box1 + box2;
implicit
关键字用于声明隐式的用户定义类型转换运算符。explicit
则是显式。
根据第三种声明方式,编码如下:
class Digit
{
public Digit(double d) { val = d; }
public double val;
// ...other members
// User-defined conversion from Digit to double
public static implicit operator double(Digit d)
{
return d.val;
}
// User-defined conversion from double to Digit
public static implicit operator Digit(double d)
{
return new Digit(d);
}
}
调用重载的运算符:
class Program
{
static void Main(string[] args)
{
Digit dig = new Digit(7);
//This call invokes the implicit "double" operator
double num = dig;
//This call invokes the implicit "Digit" operator
Digit dig2 = 12;
Console.WriteLine("num = {0} dig2 = {1}", num, dig2.val);
Console.ReadLine();
}
}