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++中的操作符重载
一.什么是操作符重载 操作符重载可以分为两部分:“操作符”和“重载”.说到重载想必都不陌生了吧,这是一种编译时多态,重载实际上可以分为函数重载和操作符重载.运算符重载和函数重载的不同之处在于操作符重载 ...
随机推荐
- Windows桌面共享中一些常见的抓屏技术
1. BitBlt 我想做Windows开发应该都知道这个API, 它能实现DC间的内容拷贝, 如果我们把源DC指定成Monitor DC或是桌面DC, 它就能实现抓屏功能. 对于通过这种方式的抓屏, ...
- Stealth视频教程学习笔记(第二章)
Stealth视频教程学习笔记(第二章) 本文是对Unity官方视频教程Stealth的学习笔记.在此之前,本人整理了Stealth视频的英文字幕,并放到了优酷上.本文将分别对各个视频进行学习总结,提 ...
- AWS系列之三 使用EBS
Amazon Elastic Block Store(EBS)可作为EC2实例的持久性数据块级存储.其具有高可用性和持久性的特点,可用性高达99.999%.给现有的EC2实例扩展新的存储块只需要几分钟 ...
- mysql --prompt
mysql --prompt修改命令行链接mysql时的提示符,shell脚本示例如下 #!/bin/bash in crm) cmd='mysql -h192.168.1.2 -uroot -pro ...
- linux下获取线程号
#include <sys/syscall.h> pid_t gettid() { return syscall(SYS_gettid); }
- 使用Sublime Text 2 编辑Markdown
http://www.ituring.com.cn/article/6815 一.安装 下载Sublime Text 2 安装 二.安装Package Control 按Ctrl + ` 打开cons ...
- [Linux]Linux下redis的安装及配置.
在上一篇[Linux] linux下安装配置 zookeeper/redis/solr/tomcat/IK分词器 详细实例. 我们已经将redis所需tar包拷贝到了linux下的root 根目录下, ...
- SSH+JPA查询两个数据库
1.第一步导包: 1.struts2包: 2.spring包: 3.hibernate包: 4.数据库包: 2.web.xml配置 3.struts2的配置: 1.struts.xml 2.s001. ...
- C#设计模式-单例模式
单例模式三种写法: 第一种最简单,但没有考虑线程安全,在多线程时可能会出问题…… public class Singleton { private static Singleton _instance ...
- IDE:Eclipse查看Servlet源码
一.源码下载 1.打开tomcat官网:http://tomcat.apache.org/ , 点击右侧下载菜单(以tomcat-7为例)进入下载页面:http://tomcat.apache. ...