• C#实现函数根据返回类型重载


    一直以来都很奇怪为何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() 
        { 
            return "I'm a string"; 
        }

       private int TestInt() 
        {
            return 100; 
        }

    TestHelper结构是包装Foo类的

    public struct TestHelper 
        { 
            Foo m_host; 
            public TestHelper(Foo host) 
            { 
                m_host = host; 
            }

        //实现TestHelperint的隐式转换

            public static implicit operator int(TestHelper helper) 
            { 
                return helper.m_host.TestInt(); 
            }

        //实现TestHelperstring的隐式转换

            public static implicit operator string(TestHelper helper) 
            { 
                return helper.m_host.TestString(); 
            } 
        } 

    关键在于Foo类一个巧妙的函数

    Public TestHelper Test() 
        { 

        //返回一个TestHelper对象,由该对象去隐式转换目标值
            return new TestHelper(this); 
        }

    最终调用起来类似

    Foo f = new Foo(); 
    int i = f.Test(); 
    string s = f.Test(); 

    效果达成,无毒无副作用就是多了个类(原文用内部类),收藏。●▽●

  • 相关阅读:
    大道至简阅读笔记08-完结
    (转)MySQL的JDBC驱动源码解析
    Win7如何开启Telnet服务
    idea 设置jetty进程jvm参数
    (转)如何在maven环境中设置JVM参数
    (转)IntelliJ Idea 常用快捷键列表 for win
    cglib Demo
    MAVEN 配置阿里巴巴镜像
    MyBatis入门基础(一)
    JAVA常见面试题之Forward和Redirect的区别
  • 原文地址:https://www.cnblogs.com/MigCoder/p/3500747.html
Copyright © 2020-2023  润新知