using System;
namespace ConsoleApp1
{
class Program
{
class Rect
{
int a=99;
double b = 5.5;
//! 3
public static implicit operator double(Rect value)
{
//! 4
return value.b;
}
//! 5
public static explicit operator int(Rect value)
{
return value.a;
}
}
static void Main(string[] args)
{
var v = new Rect();
double x = 5.55555;
int num;
//! 1
num = (int)x;
//! 2
x = num;
num = (int)v;
x = v;
}
}
}
1、把 double 强制转换为 int ,这将会导致精度丢失,此时 num 是 5
2、把 int 转换为 double ,由于 double 包含了 int 精度,所以 x 将会是 5.000000
3、由于 Rect 类 不能隐式转换为 double ,所以使用关键字 implicit 对 Rect 类 自定义 隐式转换
4、返回的类型必须和目标类型一致 或 可以转换为目标类型的类型
5、Rect 类 不能显示转换为 int ,使用关键字 explicit 自定义 显式转换
*无论是自定义显式还是隐式转换 都必须是静态的
自定义隐式转换语法
public static implicit operator 目标类型(当前类类型 value)
{
return 目标类型值;
}
自定义显式转换语法
public static explicit operator 目标类型(当前类类型 value)
{
return 目标类型值;
}