算法重用是非常普遍的需求,在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. 如何为编程爱好者设计一款好玩的智能硬件(九)——LCD1602点阵字符型液晶显示模块驱动封装(下)

    六.温湿度传感器DHT11驱动封装(下):如何为编程爱好者设计一款好玩的智能硬件(六)——初尝试·把温湿度给收集了(下)! 七.点阵字符型液晶显示模块LCD1602驱动封装(上):如何为编程爱好者设计 ...

  2. http学习笔记(四)——HTTP报文

    http报文是在http应用程序之间发送的数据块,这些数据块以一些文本形式的元信息. 请求报文从客户端流入服务器,向服务器请求数据,服务器响应请求,响应报文从服务器流出,回到客户端. 这就构成了一个事 ...

  3. 厚积薄发,拥抱 .NET 2016

    厚积薄发这个词是高三英语老师在高考前写在黑板上,高中三年努力这么久,是时候迎面而上,冲刺向前.所以,一想到.NET 2016,脑海里蹦出的第一个词就是它. .NET 2016 是 .NET 一次质的飞 ...

  4. Winform文件下载之WebClient

    最近升级了公司内部使用的一个下载小工具,主要提升了下面几点: 1. 在一些分公司的局域网中,连接不上外网 2. 服务器上的文件更新后,下载到的还是更新前的文件 3. 没有下载进度提示 4. 不能终止下 ...

  5. Visual Studio 2015 速递(4)——高级特性之移动开发

    系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...

  6. ios UIButton设置单选效果,以及同时设置图片和标题

    一,设置单选效果 - (void)selectedBtnPress:(UIButton*)sender { //首先把原来按钮的选中效果消除 for (int i=0;i<num;i++) {/ ...

  7. oracle 表类型变量的使用

    转载于:http://www.itxuexiwang.com/a/shujukujishu/oracle/2016/0216/89.html?1455872314 使用记录类型变量只能保存一行数据,这 ...

  8. AngularJS 源码分析1

    AngularJS简介 angularjs 是google出品的一款MVVM前端框架,包含一个精简的类jquery库,创新的开发了以指令的方式来组件化前端开发,可以去它的官网看看,请戳这里 再贴上一个 ...

  9. salesforce 零基础开发入门学习(十四)salesforce中工厂模式的运用

    提到工厂模式,想必大家都很熟悉,工厂模式作为一种设计模式,同样在salesforce中适用. 举一个例子,笔作为基类,可以有钢笔,铅笔,圆珠笔等等.有一个笔的工厂,当你向它要钢笔,它就会生产一支钢笔; ...

  10. 练习3:修改withdraw 方法 练习目标-使用有返回值的方法:在本练习里,将修改withdraw方法以返回一个布尔值来指示交易是否成功。

    boolean withdraw(double get){ if(get<=balance) { System.out.println("取钱"+get+"元,当余 ...