C# 重载的几种实现
算法重用是非常普遍的需求,在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# 重载的几种实现的更多相关文章
- C++函数重载的4种错误示例
函数重载的4种错误示例: #include <iostream> #include <string> using namespace std; //函数重载 同函数名,函数重载 ...
- javascript 函数重载另一种实现办法
最近在读javascript忍者 感受下jquery作者 john Resig对于js的独到见解. 先上代码: function addMethod(object,name,fn){ var old ...
- Python基础教程:模块重载的五种方法
环境准备 新建一个 foo 文件夹,其下包含一个 bar.py 文件 $ tree foo foo └── bar.py 0 directories, 1 file bar.py 的内容非常简单,只写 ...
- C++多态(二)——函数重载(overloading)和操作符重载
任何函数都能重载. 一.普通函数的重载 C语言中一个函数只能处理一个类型的数据,不可能兼顾两种或多种数据类型:C++使用使用同一名称的函数来处理多个类型的数据. #include <ios ...
- 一种高效的 vector 四则运算处理方法
实现 vector 的四则运算 这里假设 vector 的运算定义为对操作数 vector 中相同位置的元素进行运算,最后得到一个新的 vector.具体来说就是,假如 vector<int&g ...
- C++运算符重载详解
1.什么是运算符重载 运算符重载是一种函数重载. 运算符函数的格式:operatorop(argument-list)例如,operator+()重载+运算符.其中的op,必须是有效的C++运算符,如 ...
- C++:构造函数的重载
构造函数的重载的判断条件是:参数的个数或者类型不同,其他要保持一样 举例说明: 方式一:在类中声明重载构造函数,在类外定义 //第一种方法: #include<iostream> usin ...
- java_重写与重载的区别
重写与重载的区别 重载(Overloading)和重写(Overriding)是Java中两个比较重要的概念.但是对于新手来说也比较容易混淆.本文通过两个简单的例子说明了他们之间的区别. 定义 重载 ...
- C++中的操作符重载
一.什么是操作符重载 操作符重载可以分为两部分:“操作符”和“重载”.说到重载想必都不陌生了吧,这是一种编译时多态,重载实际上可以分为函数重载和操作符重载.运算符重载和函数重载的不同之处在于操作符重载 ...
随机推荐
- [每日电路图] 8、三轴加速度计LIS3DH电路图及功耗等指标
看TI的官网资料:http://www.st.com/web/en/catalog/sense_power/FM89/SC444/PF250725 一.初次接触关注的信息: 1.1.概述中的关键信息 ...
- [HIMCM暑期班]第2课:建模
第二节课从最简单的模型开始入手:七桥问题. 首先,先去wikipedia上了解一些有关七桥问题的背景知识.http://en.wikipedia.org/wiki/Seven_Bridges_of_K ...
- C++函数指针
然后,我在想C++函数指针到底有啥用呢.想了又想,我想出来一种,就是将函数地址(函数n)作为函数(函数1)的参数时,便可以在访问函数1的时候就决定了,在函数1里面调用的是哪一个函数(函数1,2,3,4 ...
- jmx完整示例
很早就开始去了解这个了,不过一直都是皮毛,基本概念明白,具体api几乎一无不知... 认真看了几篇文章,做了测试,终于有所了解 参考 入门级别: http://www.cnblogs.com/agou ...
- DDD~WCF做中间件,实现多个项目的缓存共享
回到目录 事情是这样的,前台网站有些数据不希望每次都从数据库里读,所以,应该做个缓存,而引起缓存更新的入口来自网站的后台管理,而前台和后台被部署在不同的网站中,这时缓存的更新就成了问题,前台的缓存与后 ...
- Atiti attilax主要成果与解决方案与案例rsm版 v2
Atiti attilax主要成果与解决方案与案例rsm版 v2 1. ##----------主要成果与解决方案与 参与项目1 ###开发流程与培训系列1 #-----组织运营与文化建设系列1 # ...
- Asp.net WebApi 项目示例(增删改查)
1.WebApi是什么 ASP.NET Web API 是一种框架,用于轻松构建可以由多种客户端(包括浏览器和移动设备)访问的 HTTP 服务.ASP.NET Web API 是一种用于在 .NET ...
- Sqlserver分页的问题
好久没有用SqlServer了,今天写了一个分页,遇到了小问题,本着温故而知新的道理,再来随便写些什么吧. 语句是这样的 string sql=“select * from ( select*,(ro ...
- linux-redis
1.下载 6.启动 ./redis-server ../conf/redis.conf 7.测试 ./redis-cli -p 7030 set str "hello" ./red ...
- Android项目中,在一个数据库里建立多张表
一,创建一个公共的DBAdapter; 为了在整个程序运行期间调用该公共的数据库,我们定义了一个扩展自Application的CommDB类: 1,创建唯一的数据库: public class Com ...