C#中的不同类型之间的显式与隐式转换实现
2012-05-30 16:02
525 查看
在项目中可能经常遇到不同类型之间的转换, 如 int转换为byte double转换为int。
那么这些显式或隐式转换是如何实现的呢,下面也是以User对象举例。
首先贴上来User.cs的所有属性
需求实现如下代码的可用性:
--------------------------------------------
解释完需求后,下面是咱们的实现代码了:
在User.cs中:
关于以上代码的说明:
对于转换操作符方法,编译器即可生成代码来隐式调用一个转换操作符方法,也可只有在源代码进行了显式转型时,才生成代码来调用一个转换操作符方法。在C#中,implicit 关键字告诉编译器为了生成代码来调用方法,不需要在源代码中进行显式转型。相反,explicit 关键字告诉编译器只有在发现了显式转型时,才调用方法。
在implicit 或 explicit 关键字之后,要指定 operator 关键字告诉编译器该方法是一个转换操作符。在 operator 之后,指定对象要转换成什么类型。在圆括号内,则指定要从什么类型转换。
以上实现了我们的需求了,下面贴下Main方法,以及Demo的完整例子项目下载:
完整Demo项目下载:http://files.cnblogs.com/andrew-blog/ConvertDemo.rar
参考:http://www.wxzzz.com/?id=98
那么这些显式或隐式转换是如何实现的呢,下面也是以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
相关文章推荐
- C#中使用强制类型实现字符串和ASCII码之间的转换
- 不同平面直角坐标系之间的转换公式的推导及C#代码实现
- C#中使用强制类型实现字符串和ASCII码之间的转换
- 黑马程序员----C#中的不同数据类型之间的转换
- c# implicit explicit关键字(隐式和显式数据类型转换)
- c#实现隐式的用户自定义类型转换(关键字implicit operator)
- c#实现显式的用户自定义类型转换(关键字explicit operator)
- C# 不同类型数组之间的转换
- C#的隐式类型转换和显式类型转换
- C#实现String类型和json之间的相互转换功能示例
- C# 数据类型转换 显式转型、隐式转型、强制转型
- C#的隐式类型转换和显式类型转换
- c# implicit explicit关键字(隐式和显式数据类型转换)
- C#的类型转换(1)之隐式和显式转换
- c#中通过自定义隐式转换实现返回值重载
- C#中隐式类型转换和显示类型转换
- 实现C#和VB.net之间的相互转换
- c++ operator操作符的两种用法:重载和隐式类型转换,string转其他基本数据类型的简洁实现string_cast
- c#实现16进制和字符串之间转换的代码
- javascript不同类型数据之间的运算的转换方法