算法重用是非常普遍的需求,在C#中可以使用如下手段实现,非常简单,自己记录一下,方便查询。

以一个小功能为例来说明一下:打印1-5这5个数,和A-E这5个字符。

重载方式

static void Main(string[] args)
{
PrintValues(, );
PrintValues('A', 'E');
Console.ReadLine();
} private static void PrintValues(int startIndex, int endIndex)
{
if (startIndex > endIndex)
{
int temp = endIndex;
endIndex = startIndex;
startIndex = temp;
} for (int i = startIndex; i <= endIndex; i++)
{
Console.WriteLine(i.ToString());
}
} private static void PrintValues(char startIndex, char endIndex)
{
if (startIndex > endIndex)
{
char temp = endIndex;
endIndex = startIndex;
startIndex = temp;
} for (char i = startIndex; i <= endIndex; i++)
{
Console.WriteLine(i.ToString());
}
}

默认值方式

static void Main(string[] args)
{
PrintValues();
PrintValues('A');
Console.ReadLine();
} private static void PrintValues(int startIndex, int endIndex = )
{
if (startIndex > endIndex)
{
int temp = endIndex;
endIndex = startIndex;
startIndex = temp;
} for (int i = startIndex; i <= endIndex; i++)
{
Console.WriteLine(i.ToString());
}
} private static void PrintValues(char startIndex, char endIndex = 'E')
{
if (startIndex > endIndex)
{
char temp = endIndex;
endIndex = startIndex;
startIndex = temp;
} for (char i = startIndex; i <= endIndex; i++)
{
Console.WriteLine(i.ToString());
}
}

好吧,对于很多含有默认值的函数来说,这个是有效减少重载的方式。

泛型方式
  这个例子我简单试了一下,没找到使用泛型合适的方式,壮士,教我!好在我直接使用dynamic实现了,也不怎么纠结。看其中的交换的那个可能实现:

static void Main(string[] args)
{
int startIndex = ;
int endIndex = ;
Swap<int>(ref startIndex, ref endIndex); char startCharIndex = 'A';
char endCharIndex = 'E';
Swap<char>(ref startCharIndex, ref endCharIndex); Console.ReadLine();
} private static void Swap<T>(ref T startIndex, ref T endIndex)
{
T temp = endIndex;
endIndex = startIndex;
startIndex = temp;
}

  当然了,强大的泛型可不是这么简单货,感兴趣自己搜索。

dynamic方式

static void Main(string[] args)
{
PrintValues(, );
PrintValues('A', 'E');
Console.ReadLine();
} private static void PrintValues(dynamic startIndex, dynamic endIndex)
{
if (startIndex > endIndex)
{
dynamic temp = endIndex;
endIndex = startIndex;
startIndex = temp;
} for (dynamic i = startIndex; i <= endIndex; i++)
{
Console.WriteLine(i.ToString());
}
}

  简单,当只需要运行时行为的时候,或者是不希望编辑器检查的时候,dynamic真是方便。

C# 重载的几种实现的更多相关文章

  1. C++函数重载的4种错误示例

    函数重载的4种错误示例: #include <iostream> #include <string> using namespace std; //函数重载 同函数名,函数重载 ...

  2. javascript 函数重载另一种实现办法

    最近在读javascript忍者 感受下jquery作者 john Resig对于js的独到见解. 先上代码: function addMethod(object,name,fn){ var old ...

  3. Python基础教程:模块重载的五种方法

    环境准备 新建一个 foo 文件夹,其下包含一个 bar.py 文件 $ tree foo foo └── bar.py 0 directories, 1 file bar.py 的内容非常简单,只写 ...

  4. C++多态(二)——函数重载(overloading)和操作符重载

       任何函数都能重载. 一.普通函数的重载 C语言中一个函数只能处理一个类型的数据,不可能兼顾两种或多种数据类型:C++使用使用同一名称的函数来处理多个类型的数据. #include <ios ...

  5. 一种高效的 vector 四则运算处理方法

    实现 vector 的四则运算 这里假设 vector 的运算定义为对操作数 vector 中相同位置的元素进行运算,最后得到一个新的 vector.具体来说就是,假如 vector<int&g ...

  6. C++运算符重载详解

    1.什么是运算符重载 运算符重载是一种函数重载. 运算符函数的格式:operatorop(argument-list)例如,operator+()重载+运算符.其中的op,必须是有效的C++运算符,如 ...

  7. C++:构造函数的重载

    构造函数的重载的判断条件是:参数的个数或者类型不同,其他要保持一样 举例说明: 方式一:在类中声明重载构造函数,在类外定义 //第一种方法: #include<iostream> usin ...

  8. java_重写与重载的区别

    重写与重载的区别 重载(Overloading)和重写(Overriding)是Java中两个比较重要的概念.但是对于新手来说也比较容易混淆.本文通过两个简单的例子说明了他们之间的区别. 定义 重载 ...

  9. C++中的操作符重载

    一.什么是操作符重载 操作符重载可以分为两部分:“操作符”和“重载”.说到重载想必都不陌生了吧,这是一种编译时多态,重载实际上可以分为函数重载和操作符重载.运算符重载和函数重载的不同之处在于操作符重载 ...

随机推荐

  1. 如何设计一门语言(八)——异步编程和CPS变换

    关于这个话题,其实在(六)里面已经讨论了一半了.学过Haskell的都知道,这个世界上很多东西都可以用monad和comonad来把一些复杂的代码给抽象成简单的.一看就懂的形式.他们的区别,就像用js ...

  2. 3、CC2541芯片中级教程-OSAL操作系统(ADC光敏电阻和修改串口波特率)

    本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...

  3. iOS——CALayer的shadow无效问题

    CALayer *sublayer = [CALayer layer]; sublayer.backgroundColor = [UIColor purpleColor].CGColor; subla ...

  4. UWP入门教程1——UWP的前世今生

    目录 引言 设备族群 UI 和通用输入模式 通用控件和布局面板 工具 自适应扩展 通用输入处理 引言 在本篇文章中,可以掌握以下知识: 设备族群,如何决定目标设备 新的UI控件和新面板帮助你适应不同的 ...

  5. JavaScript模板引擎实例应用

    在之前的一篇名为<移动端基于HTML模板和JSON数据的JavaScript交互>的文章中,我向大家说明了为什么要使用JavaScript模板以及如何使用,文末还提到了laytpl.art ...

  6. 程序员藏经阁 Linux兵书

    程序员藏经阁 Linux兵书 刘丽霞 杨宇 编   ISBN 978-7-121-21992-4 2014年1月出版 定价:79.00元 536页 16开 内容提要 <Linux兵书>由浅 ...

  7. python学习 文件操作

    一.python打开文件 #=====================python 文件打开方式 open()===================== # open(fileName,type) t ...

  8. HTML中的title换行问题

    有时我们需要在html元素的title中换行显示信息.以下几种方法均可以实现: 直接在titile属性中使用换行,如下所示: asd">asdsadsad</a> 在tit ...

  9. hibernate(四) 双向多对多映射关系

    序言 莫名长了几颗痘,真TM疼,可能是现在运动太少了,天天对着电脑,决定了,今天下午花两小时去跑步了, 现在继上一章节的一对多的映射关系讲解后,今天来讲讲多对多的映射关系把,明白了一对多,多对多个人感 ...

  10. 使用BCP导出导入数据

    bcp 实用工具可以在 Microsoft SQL Server 实例和用户指定格式的数据文件间大容量复制数据. 使用 bcp 实用工具可以将大量新行导入 SQL Server 表,或将表数据导出到数 ...