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 8.1 试用感受:蛋疼感大幅降低
众所周知windows 8 的最大使用感受就是蛋疼. 无论是微软MVP,还是我这样的万年不悔微软小白鼠,普通用户,小白用户,或多或少的都对这款操作系统感到蛋疼. 槽点太多,以至于大家都懒得批判了.好在 ...
- Ubuntu环境搭建系列—Chrome/JDK/Android篇
其实每次重装Ubuntu系统的时候都要进行一次基本到环境配置,而且每次总会忘记一些环境配置到东西,所以就写下这个博文,方便自己以后重装系统的时候回顾,同时也给大家做为重装系统后基本环境搭建的参考. 因 ...
- 22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表。然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法showB输出大写的英文字母表。最后编写主类C,在主类的main方法 中测试类A与类B。
22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表.然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法sh ...
- atitit.错误:找不到或无法加载主类 的解决 v4 qa15.doc
atitit.错误:找不到或无法加载主类 的解决 v4 qa15.doc 1.1. 修改此java文件,让他启动编译,还是不能生成了新的class, 1.2. 估计ide调试锁死class ,查看de ...
- JS的脚本语言
js的脚本语言全程javascript在网页里面使用的脚本语言:分类:1.嵌入网页里面2.在外部脚本标签可以写在网页的任何地方,但一般都写在网页的底部:<script type="te ...
- js 优化
一.for循环的优化 <!doctype html> <html lang="en"> <head> <meta charset=&quo ...
- Java 多态——与C++的比较
学习了Java和C++之后,由于长期不使用C++,而java的基础知识掌握不牢,现在已经搞不清java多态了.现在先来谈谈java多态,稍后有时间再更新C++的多态,并进行比较~ 一. Java的多态 ...
- TSQL Merge 用法
在更新数据仓库时,经常需要根据源表对Target表进行数据同步,Merge 命令具有数据更新,删除,插入的功能,专门用于数据同步,并将数据的更新输出到表中.在使用Merge命令时,需要注意when n ...
- WPF中找不到Image或者Image不是Drawing系列
WPF中默认没有引用WinForm里面的一些东西,都是用它自带的那一套,但又不能完全脱离,所以有的时候比较蛋疼
- 使用替换shader渲染
相关函数: Camera.RenderWithShader(shader: Shader, replacementTag: string) 使用指定shader渲染,只影响一帧 Camera.SetR ...