C#用户定义类型转换详解
c#用户定义类型转换
•用于自定义类和结构能够进行隐式转换和显示转换.例如:将一个自定义类类型转换成整型,浮点型等,反之亦然.
c#提供隐式转换和显式转换
•隐式转换:编译器自动执行转换
•显式转换:编译器只在使用显式转换运算符时才执行转换
声明隐式转换的语法如下.注:所有用户定义转换必须使用public和static修饰符
public static implicit operator targettype(sourcetype identifier)
{
...
return objectoftargettype;
}
targettype:目标类型
参数identitfier:源数据
例如,下面代码使一个int字面量被隐式转换为limitedint对象,反过来limitedint也可以隐式转换成一个int
class limitedint
{
const int maxvalue = 100;
const int minvalue = 0;
private int _thevalue = 0;
//属性
public int thevalue
{
get { return _thevalue; }
set
{
if (value < minvalue)
{
_thevalue = 0;
}
else
{
_thevalue = value > maxvalue ? maxvalue : value;
}
}
}
//隐式转换:将limitedint对象转为整型
public static implicit operator int(limitedint li)
{
return li.thevalue;
}
//隐式转换:将整型转换为limitedint对象
public static implicit operator limitedint(int x)
{
limitedint li = new limitedint();
li.thevalue = x;
return li;
}
}
class program
{
static void main(string[] args)
{
limitedint li = 500; //将500转换为limitedint
int value = li; //将limitedint转换为int
console.writeline("li:{0},value:{1}", li.thevalue, value);
console.readkey();
}
改代码输出结果:li:100,value:100
显示转换和强制转换运算符
前面所讲的都是隐式转换,如果你把运算符implcit改为explicit,你将不得不在实行转换时显示使用转换运算符
代码片段如下:
//显示转换:将limitedint对象转为整型
public static explicit operator int(limitedint li)
{
return li.thevalue;
}
//显示转换:将整型转换为limitedint对象
public static explicit operator limitedint(int x)
{
limitedint li = new limitedint();
li.thevalue = x;
return li;
}
static void main(string[] args)
{
limitedint li = (limitedint)500; //将500强制转换为limitedint
int value = (int)li; //将limitedint强制转换为int
console.writeline("li:{0},value:{1}", li.thevalue, value);
console.readkey();
}
下一篇: MYSQL更新优化实录