一直以来都很奇怪为何C#不能直接支持函数返回值重载,
比如如下两个函数是编译不过的
Public Class DbHelper { Public Static int ExecuteScalar(); Public Static string ExecuteScalar(); } |
今天看到了装配脑袋的这篇博文,里边就实现了我要的效果,而且语法很优美,让我们来拜读一下。
知识点预习
Implicit 关键字用于声明隐式的用户定义类型转换运算符。如果可以确保转换过程不会造成数据丢失,则可使用该关键字在用户定义类型和其他类型之间进行隐式转换。 |
也就是提供类似 decamil money = 9 的转换功能
对应的还有一个
Explicit 关键字用于声明必须使用强制转换来调用的用户定义的类型转换运算符。 |
也就是提供类似 int money = (int)9.0 的转换功能
作者使用简单的一个类 Foo 和 一个结构TestHelper
需要重载的方法放在Foo类
private string TestString() private int TestInt() |
TestHelper结构是包装Foo类的
public struct TestHelper //实现TestHelper与int的隐式转换 public static implicit operator int(TestHelper helper) //实现TestHelper与string的隐式转换 public static implicit operator string(TestHelper helper) |
关键在于Foo类一个巧妙的函数
Public TestHelper Test() //返回一个TestHelper对象,由该对象去隐式转换目标值 |
最终调用起来类似
Foo f = new Foo(); |
效果达成,无毒无副作用就是多了个类(原文用内部类),收藏。●▽●