C#中类的显示类型转换和隐式类型转换
栗子
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
Stone s = new Stone(1000);
Monkey m = (Monkey)s;
}
}
class Stone
{
public int age;
public Stone(int age)
{
this.age = age;
}
}
class Monkey
{
public int age;
public Monkey(int age)
{
this.age = age;
}
}
}
上述案例是通不过编译的,因为Stone和Monkey没有任何继承关系
显示类型转换操作符
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
Stone s = new Stone(1000);
Monkey m = (Monkey)s;
Console.WriteLine(m.age);
}
}
class Stone
{
public int age;
public Stone(int age)
{
this.age = age;
}
public static explicit operator Monkey(Stone s)
{
Monkey m = new Monkey(s.age / 100);
return m;
}
}
class Monkey
{
public int age;
public Monkey(int age)
{
this.age = age;
}
}
}
可以编译和运行
隐式类型转换
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
Stone s = new Stone(1000);
Monkey m = s;
Console.WriteLine(m.age);
}
}
class Stone
{
public int age;
public Stone(int age)
{
this.age = age;
}
public static implicit operator Monkey(Stone s)
{
Monkey m = new Monkey(s.age / 100);
return m;
}
}
class Monkey
{
public int age;
public Monkey(int age)
{
this.age = age;
}
}
}
编译运行成功
fixed
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。