转换运算符的重载,其中的关键字是implicit (隐式转换),explicit(显式转换)
格式如下: public static implicit/explicit operator targetType ( source type o)
但是,转换运算符也有几点需要注意:
一、这两种运算符主要用于自定义的类之间的转换,或者,自定义类与内置类型的转换,但是不能全用于内置类型的转换,也就是说,至少要有一种是自定义的类型。
二、基类与派生类也无法再其中转换,而object为所有类的基类,因此,也不允许做转换。
三、自己在定义的时候要明确使用显示转换还是隐式转换,因为,如果用隐式转换,是系统自动完成的,很可能遇到数据丢失的情况,因此,在定义转换方式之前,要确定应该用那种方式。
下面是定义了一个转换的过程:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _06
{
class Program
{
static void Main(string[] args)
{
long l;
Rangle r = new Rangle(10, 20);
l = r;
Console.WriteLine(l);
Squre s = (Squre)r;
l = s.sarea;
Console.WriteLine("s.area="+l);
Rangle r1 = (Rangle)s;
Console.WriteLine(r1.length);
Console.WriteLine(r1.rarea);
Console.ReadKey();
}
}
class Rangle
{
public int rarea ;
public int length;
public int width;
public Rangle(int length,int width)
{
this.length = length;
this.width = width;
rarea=length*width;
}
public static implicit operator long(Rangle r)
{
long l = r.rarea;
return l;
}
public static explicit operator Squre(Rangle r)
{
Squre s = new Squre(r.width);
return s;
}
}
class Squre
{
public long sarea;
public int m;
public Squre(int m)
{
this.m = m;
sarea = m * m;
}
public static explicit operator Rangle(Squre s)
{
int m1 = (int)s.sarea;
Rangle r = new Rangle(m1,m1);
return r;
}
}
}
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------