zoukankan      html  css  js  c++  java
  • 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(); 

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

  • 相关阅读:
    新东方英语学习方法
    最易遭老板“炒”的15种员工
    如何阅读代码
    Window 消息大全使用详解
    英语学习的六大原则
    单用户多角色权限的MSSQL实现
    .Net中的5种事务总结
    一个.Net程序员关于学习的思考顺带思考人生
    Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?
    推荐几个win8系统下载比较好的网站
  • 原文地址:https://www.cnblogs.com/MigCoder/p/3500747.html
Copyright © 2011-2022 走看看