C#基本语法学习(四)

重载

  一个方法的名字和方法的参数列表称为方法的签名。C#根据方法签名来识别方法,如果两个方法签名不同那么他们就是两个不同的方法。

  重载可以是方法重载(包括构造函数重载)和运算符重载。方法重载指的是一组名字相同而参数列表不同的方法。但方法的返回值类型不同不能构成重载。

1 public static int max(int a, int b)
2 {
3
4 }
5
6 public static int max(int a, int b, int c)
7 {
8
9 }

  C#中除了方法可以重载,运算符(+、-、*)也可以被重载。运算符重载允许一个类或者结构支持某种运算符运算。当然也可以用方法实现与运算符重载相同的功能,但在某些情况下,使用运算符重载比使用方法更符合人们日常的方式和习惯。

  运算符重载语法如下:

  public static 返回类型 operator 运算符(参数列表)

  {

    //运算过程代码

  }

  在运算符重载定义语法中public、static和operator是固定的,必须在运算符重载定义中出现,public和static表示这个方法是公共的和静态的,operator表示这是一个运算符重载方法。参数列表个数与具体运算符对应。

  还有一种特殊的运算符重载,叫做类型转换运算符重载。语法如下:

  public static explicit|implicit operator 转换目的类型(参数)

  参数为待转换的数据,转换目的类型为想要得到的转换后的数据类型,explicit表示转换必须为显示转换,implicit表示转换可以是隐式转换。

  如下一维向量重载“+”和类型转换:

  1 namespace OperatorOverload
  2 {
  3        //一维向量
  4     class Vector
  5     {
  6         private int _rank = 0;
  7         public int rank
  8         {
  9             get { return _rank; }
 10         }
 11
 12         private double[] _values;
 13         public double[] values
 14         {
 15             get { return _values; }
 16         }
 17
 18         public Vector(int n)
 19         {
 20             _rank = n;
 21             _values = new double[n];
 22         }
 23
 24         public Vector(double[] doubleArray)
 25         {
 26             _rank = doubleArray.Length;
 27             _values = doubleArray;
 28         }
 29
 30         //+重载
 31         public static Vector operator +(Vector a, Vector b)
 32         {
 33             if (a.rank == 0 || b.rank == 0)
 34                 return null;
 35
 36             //向量秩不相等无法相加
 37             if (a.rank != b.rank)
 38                 return null;
 39
 40             double[] sum = new double[a.rank];
 41             double[] valuesa = a.values;
 42             double[] valuesb = b.values;
 43
 44             for (int i = 0; i < a.rank; i++)
 45             {
 46                 sum[i] = valuesa[i] + valuesb[i];
 47             }
 48
 49             Vector result = new Vector(sum);
 50
 51             return result;
 52         }
 53
 54         //类型转换重载
 55         public static explicit operator double[](Vector v)
 56         {
 57             return v.values;
 58         }
 59
 60         public static explicit operator Vector(double[] array)
 61         {
 62             return new Vector(array);
 63         }
 64
 65         //重写ToString方法
 66         public override string ToString()
 67         {
 68             string result = "(";
 69             for (int i = 0; i < _rank - 1; i++)
 70             {
 71                 result += _values[i].ToString() + ", ";
 72             }
 73             result += _values[_rank - 1] + ")";
 74
 75             return result;
 76         }
 77     }
 78 }
 79
 80 namespace OperatorOverload
 81 {
 82     class Program
 83     {
 84         static void Main(string[] args)
 85         {
 86             Vector a, b, c;
 87
 88             a = new Vector(new double[] { 11.1, 12.1, 13.1, 14.1, 15.1 });
 89             b = new Vector(new double[] {22.2, 32.2, 33.2, 34.2, 35.2});
 90             c = a + b;
 91             Console.WriteLine("Vector a=" + a.ToString());
 92             Console.WriteLine("Vector b=" + b.ToString());
 93             Console.WriteLine("Vector a+b=" + c.ToString());
 94
 95             double[] array = new double[] { 1, 2, 3, 4, 5 };
 96             Vector d = (Vector)array;
 97
 98             Console.WriteLine("array-->Vector: " + d.ToString());
 99
100             Console.ReadLine();
101         }
102     }
103 }

运行结果

Vector a=(11.1, 12.1, 13.1, 14.1, 15.1)
Vector b=(22.2, 32.2, 33.2, 34.2, 35.2)
Vector a+b=(33.3, 44.3, 46.3, 48.3, 50.3)
array-->Vector: (1, 2, 3, 4, 5)
时间: 2024-07-28 15:05:52

C#基本语法学习(四)的相关文章

Swift3.0基础语法学习&lt;四&gt;

协议和扩展: // // ViewController4.swift // SwiftBasicDemo // // Created by 思 彭 on 16/11/16. // Copyright ? 2016年 思 彭. All rights reserved. // 协议和扩展 import UIKit // 定义协议 protocol ExampleProtocol { var simpleDescription: String { get } // 使用 mutating 关键字修饰方

正则表达式语法学习

正则表达式用到的地方很多很广,一般用于验证 此文讲解了正则表达式的语法,以下内容转自网友[丰衣足食]的帖子 一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式.该模式描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. \ 将下一个字符标记为一个特殊字符.或一个原义字符.或一个 后向引用.或一个八进制转义符.例如,'n' 匹配字符 "n".'\n' 匹配一个换行符.序列 '\\' 匹配

Oracle学习(四):组函数

1.知识点:可以对照下面的录屏进行阅读 SQL> --组函数类型:avg,count,max,min,sum SQL> --工资总额 SQL> select sum(sal) from emp; SQL> --员工人数 SQL> select count(*) from emp; SQL> --平均工资 SQL> select sum(sal)/count(*) 一, avg(sal) 二 from emp; SQL> --平均奖金的三种方式:二三方法一样,

Robot Framework语法学习(一)

Robot Framework语法学习: 一.变量的声明.赋值与使用 1.变量标识符:每个变量都可以用  变量标识符 ${变量名} 来表示. 2.变量声明:可以在TestSuite上点右键或者在Edit区点Add Scalar或Add List来新增变量. 3.变量赋值: 1)Set赋值:通常这种方式主要使用Set Variable或类似的使用了Set的关键字对变量进行赋值 ${type}  Set Variable  2013 2) Get赋值:主要用于返回值上,包括系统关键字的返回值和用户关

nodejs学习四 Node.js NPM

什么是NPM? 不知道大家注意没有,windows平台下的Node.js安装包大小才区区4M多,真可以用短小精悍来形容它,作为一种编程语言,像java一个SDK 就几十M,为什么node.js的运行环境这么小呢?这其中的微妙之处在于,它拥有一个庞大的第三方软件库. 在Node本身提供的包(原生)中没有我们要实现的功能模块的时候,我们可以去寻找下是否已经有人实现了这种功能.毕竟重复造轮子这种事情,很多人都不想干. 去哪里寻找我们想要的包呢?如果你还不知道报的名字,你可以去https://www.n

ZigBee学习四 无线+UART通信

ZigBee学习四 无线+UART通信 1) 协调器编程 修改coordinator.c文件 byte GenericApp_TransID; // This is the unique message ID (counter) afAddrType_t GenericApp_DstAddr; //unsigned char uartbuf[128];/********************************************************************** L

Spark学习四:网站日志分析案例

Spark学习四:网站日志分析案例 标签(空格分隔): Spark Spark学习四网站日志分析案例 一创建maven工程 二创建模板 三日志分析案例 一,创建maven工程 1,执行maven命令创建工程 mvn archetype:generate -DarchetypeGroupId=org.scala-tools.archetypes -DarchetypeArtifactId=scala-archetype-simple -DremoteRepositories=http://scal

Beaglebone Back学习四(GPIO实验)

GPIO Beaglebone Back开发板引出了92个引脚,其中只有65个GPIO口可通过配置使用,由于引脚具有"复用"的特性,大约每个引脚有8种工作模式(Beagle System Reference Manual),默认情况下,设为Mode7.由于P8扩展部分的引脚功能相对简单,复用不多,故项目功能复杂时,最好选择P8上的GPIO口. 对GPIO口的操作,主要有三个步骤 1 选择GPIO口根据以下两表,确定使用那个GPIO口,该表也可以在BBB_SRM文件中找到. (1)拉电流

Silverlight学习(四) domainservice动态多条件查询

上次讲了silverlight+MVVN+EF的简单框架,能够实现简单的数据CURD,但是多条件动态的查询一直没有实现.在网上查阅了很多资料,发现自己走了很多误区,代码很难调试正确. 这次的查询是基于上次的查询,只是增加了一个查询条件,动态多条件的查询的重点是获取查询的语言. 1 private string GetSql() 2 { 3 string query = "1=1"; 4 if (!string.IsNullOrEmpty(searchText.name)) 5 { 6

【JavaScript】02.基础语法学习

[JavaScript]02.基础语法学习 引言: 老农认为(老农是我对自己的昵称),学习任何一门计算机程序语言都要先从它的语法知识开始.计算机程序语言由一堆预定义的字符和书写这些字符的规则组成.这些预定义的字符在语言里面叫做关键字或者保留字,书写这些字符的规则叫做语法. 计算机语言(Computer Lnguage),是指用于人与计算机之间通讯的语言.语言分为自然语言与人工语言两大类.自然语言是人类在自身发展的过程中形成的语言,是人与人之间传递信息的媒介.人工语言指的是人们为了某种目的而自行设