您的位置:首页 > 编程语言 > C#

C#中的不同类型之间的显式与隐式转换实现

2012-05-30 16:02 525 查看
在项目中可能经常遇到不同类型之间的转换, 如 int转换为byte double转换为int。

那么这些显式或隐式转换是如何实现的呢,下面也是以User对象举例。

首先贴上来User.cs的所有属性

/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }

/// <summary>
/// 持有金额
/// </summary>
public int Money { get; set; }


需求实现如下代码的可用性:

User u1 = 5;                    //int隐式转换为User
User u2 = "王旭";               //string隐式转换为User

int money = (int)user;          //User显式转换为int
string name = (string)user;     //User显式转换为string


--------------------------------------------

解释完需求后,下面是咱们的实现代码了:

在User.cs中:

#region 类型转换构造函数

//构造一个由int类型隐式构造并返回一个User
public static implicit operator User(int money)
{
return new User() { Money = money };
}

//构造一个由string类型隐式构造并返回一个User
public static implicit operator User(string userName)
{
return new User() { Name = userName };
}

//由一个User对象显式返回一个int
public static explicit operator int(User user)
{
return user.Money;
}

//由一个User对象显式返回一个string
public static explicit operator string(User user)
{
return user.Name;
}

#endregion


关于以上代码的说明:

对于转换操作符方法,编译器即可生成代码来隐式调用一个转换操作符方法,也可只有在源代码进行了显式转型时,才生成代码来调用一个转换操作符方法。在C#中,implicit 关键字告诉编译器为了生成代码来调用方法,不需要在源代码中进行显式转型。相反,explicit 关键字告诉编译器只有在发现了显式转型时,才调用方法。

在implicit 或 explicit 关键字之后,要指定 operator 关键字告诉编译器该方法是一个转换操作符。在 operator 之后,指定对象要转换成什么类型。在圆括号内,则指定要从什么类型转换。

以上实现了我们的需求了,下面贴下Main方法,以及Demo的完整例子项目下载:

using System;
using System.Collections.Generic;
using System.Text;

namespace ConvertDemo
{
class Program
{
static void Main(string[] args)
{
//构造一个User对象
User user = new User();
user.Name = "Andrew";
user.Money = 100;

//依次测试咱们写的隐式、显式转换吧
User u1 = 5;                    //int隐式转换为User
User u2 = "王旭";               //string隐式转换为User

int money = (int)user;          //User显式转换为int
string name = (string)user;     //User显式转换为string

//以上代码测试了咱们写的4个转换方法,下面打印出来看看吧。~
Console.WriteLine("u1:" + u1.Name + "," + u1.Money);
Console.WriteLine("u2:" + u2.Name + "," + u2.Money);
Console.WriteLine("money:" + money);
Console.WriteLine("name:" + name);

Console.ReadLine();
}
}
}


完整Demo项目下载:http://files.cnblogs.com/andrew-blog/ConvertDemo.rar

参考:http://www.wxzzz.com/?id=98
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: