一.重载转换运算符
//例如:int 值可以隐式转化为double值,但反过来就必须显示转换。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace ConsoleApplication2
{
public class Program
{
static void Main(string[] args)
{
//隐式
ConClass1 op1 = new ConClass1();
op1.val = 3;
ConClass2 op2 = op1;
//显示
ConClass2 op22 = new ConClass2();
op22.val = 3e15;//double数字太大时转化会溢出报错
ConClass1 op11 = (ConClass1)op22;
}
public class ConClass1
{
public int val;
//隐式重载运算符
public static implicit operator ConClass2(ConClass1 op1)
{
ConClass2 returnVal = new ConClass2();
returnVal.val = op1.val;
return returnVal;
}
}
public class ConClass2
{
public double val;
//显示重载预算符
public static explicit operator ConClass1(ConClass2 op2)
{
ConClass1 returnVal = new ConClass1();
checked
{
returnVal.val = (int)op2.val;
}
return returnVal;
}
}
}
}
二.as 和 is
1.任何类型都可以转换为其基类类型,用隐式转换完成;
2.任何类型转换为其派生类型时,必须进行显示转换。
3.使用GetType可以取得任何对象的精确类型;
4.基本类型可以使用Convert类实现类型转换;
5.除了string以外的其他类型都有Parse方法,用于将字符串类型转换成对应的基本类型;
6.值类型和引用类型的转换称为装箱(boxing)或拆箱(unboxing);
is转换规则:
- 检查对象类型的兼容性,并返回结果true(false);
2.不会抛出异常;
3.如果对象为null,刚返回false;
as转换规则:
1.检查对象类型的兼容性,并返回转换结果,如果不兼容则返回null; 2.不会抛出异常;
3.如果结果判断为空,则强制执行类型转换将抛出异常;
4.as是引用类型的类型转换或者装箱转换,不能用与值类型的转换。











网友评论