《CLR Via C# 第3版》笔记之(八) - 类型的转换构造器和方法
主要内容
- 类型的转换构造器
- 显式/隐式的转换操作符
1. 类型的转换构造器
类型转换构造器是指 通过一种类型(比如Type1)的实例来构造另一种类型(比如Type2)的实例。
一般用于:
1) Type1和Type2之间没有继承关系,但是仍然希望从Type1转换到Type2
2) Type1和Type2是完全不同的两种类型
使用方法如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | using System; namespace cnblog_bowen { public class CLRviaCSharp_8 { static void Main( string [] args) { Type1 t1 = new Type1(10); t1.Show(); // 通过Type1 来构造 Type2 Type2 t2 = new Type2(t1); t2.Show(); Console.ReadKey( true ); } } public class Type1 { private Int32 type1_n; public int Type1_n { get { return type1_n; } } public Type1(Int32 n) { type1_n = n; } public void Show() { Console.WriteLine( "type1_n = " + type1_n.ToString()); } } public class Type2 { private Int32 type2_n; // 类型转换构造器,根据Type1来构造Type2 public Type2(Type1 t1) { type2_n = t1.Type1_n + 10; } public void Show() { Console.WriteLine( "type2_n = " + type2_n.ToString()); } } } |
显示结果如下:
2. 显式/隐式的转换操作符
我们可以看出 通过构造器来完成类型的转换并不是很灵活。
其实C#中还提供了显示和隐式的转换方法。
隐式转换的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | using System; namespace cnblog_bowen { public class CLRviaCSharp_8 { static void Main( string [] args) { Type1 t1 = new Type1(10); t1.Show(); // 通过隐式转换将Type1转为Type2 Type2 t2 = t1; t2.Show(); Console.ReadKey( true ); } } public class Type1 { private Int32 type1_n; public int Type1_n { get { return type1_n; } } public Type1(Int32 n) { type1_n = n; } public void Show() { Console.WriteLine( "type1_n = " + type1_n.ToString()); } } public class Type2 { private Int32 type2_n; // 类型转换构造器,根据Type1来构造Type2 public Type2(Type1 t1) { type2_n = t1.Type1_n + 10; } // implicit关键字表示是隐式转换 public static implicit operator Type2(Type1 t1) { return new Type2(t1); } public void Show() { Console.WriteLine( "type2_n = " + type2_n.ToString()); } } } |
显式转换的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | using System; namespace cnblog_bowen { public class CLRviaCSharp_8 { static void Main( string [] args) { Type1 t1 = new Type1(10); t1.Show(); // 通过显式转换将Type1转为Type2 Type2 t2 = (Type2)t1; t2.Show(); Console.ReadKey( true ); } } public class Type1 { private Int32 type1_n; public int Type1_n { get { return type1_n; } } public Type1(Int32 n) { type1_n = n; } public void Show() { Console.WriteLine( "type1_n = " + type1_n.ToString()); } } public class Type2 { private Int32 type2_n; // 类型转换构造器,根据Type1来构造Type2 public Type2(Type1 t1) { type2_n = t1.Type1_n + 10; } // explicit关键字表示是显式转换 public static explicit operator Type2(Type1 t1) { return new Type2(t1); } public void Show() { Console.WriteLine( "type2_n = " + type2_n.ToString()); } } } |
通过显式/隐式转换操作符来进行类型转换时需要注意两点:
1)显式/隐式转换函数必须是public的
2)显式/隐式转换函数必须是static的
为了更好的理解转换操作符和操作符重载方法,强烈建议将System.Decimal类型作为一个典型来研究。
标签:
CLR via C#笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!