文档章节

6.C#函数-2

eddy_linux
 eddy_linux
发布于 2017/07/28 22:26
字数 765
阅读 7
收藏 0
//在结构中定义的函数
/*
 在结构中不但可以定义数据,还可以包含函数
 主要左右是在引用结构的时候会有一些功能代码上的重复,所以在结构定义函数,可以减少我们重复编写引用结构时所需要写的代码
 */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 结构函数
{
    struct CustomerName
    {
        public string firstName;
        public string lastName;
        public string getName()
        {
            return firstName + " " + lastName;
        }
    }
    struct Vector3
    {
        public float x;
        public float y;
        public float z;
        public double Distance()
        {
            return Math.Sqrt(x * x + y * y + z * z);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            CustomerName myName;
            myName.firstName = "siki";
            myName.lastName = "Yang";
            Console.WriteLine("My name is {0} {1}.", myName.firstName, myName.lastName);
            Console.WriteLine("My name is " + myName.getName());
            Vector3 myVector3;
            myVector3.x = 3;
            myVector3.y = 3;
            myVector3.z = 3;
            Console.WriteLine(myVector3.Distance());
            Console.ReadKey();
        }
    }
}
/*
 为什么使用函数重载overload
 假设我们有一个函数来实现求的一个数组的最大值
 这个函数只能处理int数组如果想处理double类型的话需要再定义一个函数
 函数名相同,参数不同,这个叫做函数的重载,编译器通过参数去识别该调用那一个函数
 */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 函数的重载
{
    class Program
    {
        static int MaxValue(params int[] array)
        {
            Console.WriteLine("int类型的maxvalue被调用");
            int maxValue = array[0];
            for (int i = 0; i < array.Length; i++)
            {
                if (array[i] > maxValue)
                {
                    maxValue = array[i];
                }
            }
            return maxValue;
        }
        static double MaxValue(params double[] array)
        {
            Console.WriteLine("double类型的maxvalue被调用");
            double maxValue = array[0];
            for (int i = 0; i < array.Length; i++)
            {
                if (array[i] > maxValue)
                {
                    maxValue = array[i];
                }
            }
            return maxValue;
        }
        static void Main(string[] args)
        {
            int res = MaxValue(2, 3, 2354);
            double res2 = MaxValue(1.1, 232.2, 3432.43);
            Console.WriteLine(res);
            Console.WriteLine(res2);

        }
    }
}
/*  
 委托(delegate)是一种存储函数引用的类型。
委托的定义指定了一个返回类型和一个参数列表
定义了委托之后,就可以声明该委托类型的变量,接着就可以把一个返回类型跟参数列表跟委托一样的函数赋值给这个变量。

委托的使用分两步
	定义
	声明(变量)
结构体,枚举的使用同上都分为定义和声明 
整数类型,数组类型,字符串类型,都是直接声明变量的,因为类型的定义已经完成了(CLR中已经完成定义)

*/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 委托的定义和声明
{
	//定义一个委托 类型double 类型名Mydelegate,类型名可以理解为函数名
	//委托关键字delegate
	//委托的定义不需要函数体
	public delegate double Mydelegate(double param1, double param2);
	class Program
	{
		static double Multiply(double param1,double param2)
		{
			return param1 * param2;
		}
		static double Divide(double param1, double param2)
		{
			return param1 / param2;
		}
		static void Main(string[] args)
		{
			Mydelegate de;//利用委托声明一个新的变量
			de = Multiply;//委托的变量赋值的时候,返回值跟参数列表必须一致
			Console.WriteLine(de(1.0, 2.2));
			de = Divide;
			Console.WriteLine(de(6.0, 2.0));
			Console.ReadKey();
		}
	}
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 函数的递归调用
{
    class Program
    {
        static int F(int n)
        {
            if (n == 0)
            {
                return 2;
            }
            if (n == 1)
            {
                return 3;
            }
            return F(n - 1) + F(n - 2);//函数调用自身,叫做的递归调用,递归函数一定要设置递归终止条件
        }
        static void Main(string[] args)
        {
            int res = F(40);
        }
    }
}

 

© 著作权归作者所有

上一篇: 1.安装
下一篇: 5.C#函数-1
eddy_linux
粉丝 22
博文 135
码字总数 188789
作品 0
成都
程序员
私信 提问
eval这个里面到底是什么意思

eval(function(p, a, c, k, e, r) { e = function(c) { return (c < 62 ? '': e(parseInt(c / 62))) + ((c = c % 62) > 35 ? String.fromCharCode(c + 29) : c.toString(36)) }; if ('0'.rep......

dlksajfklj
2015/04/02
1K
7
这段是网页计时的代码,求高手解决破解问题.ajax传递参数的格式是什么?

eval(function(p,a,c,k,e,r){e=function(c){return c.toString(36)}; if('0'.replace(0,e)==0){ while(c--)r[e(c)]=k[c];k=[function(e){return r[e]||e}];e=function(){return'[2-9a-i]'};c......

漂洋2008
2012/12/13
258
0
2018 年 Q1 编程语言排名:JS 第一,Swift 首进前十

RedMonk是一家专注软件开发者的行业分析公司,其总部位于美国,从2011年开始其就开始统计行业编程语言排名。 进入2018年3月,RedMonk发布了2018年初编程语言排行榜,榜单显示JavaScript依然是...

达尔文
2018/03/10
12.9K
40
ThinkPHP单字母函数(快捷方法)使用总结

ThinkPHP单字母函数(快捷方法)使用总结 投稿:shichen2014 字体:[增加 减小] 类型:转载 时间:2014-07-23 这篇文章主要介绍了ThinkPHP单字母函数(快捷方法)使用总结,对ThinkPHP的快捷方法做...

thinkyoung
2015/09/06
0
0
win7环境下sciTE个人设置过程中遇到的一些问题及解决办法

关于sciTE文本编辑器的简介 http://www.oschina.net/p/scite 我用的是3.2.2版本。 sciTEGlobal.properties里设置大部分信息 1.文字编码 默认是西方语言,想更完美地支持中文: code.page = ...

卓尔
2013/03/01
928
0

没有更多内容

加载失败,请刷新页面

加载更多

zk中选举Leader时的网络IO QuorumCnxManager解析

每台服务启动过程中,会启动一个QuorumCnxManager,负责各台服务器之间底层Leader选举过程中的网络通信 当集群中有服务器服务中断时,zk会重新选举leader 内部类 Message定义消息结构 包含了...

writeademo
4分钟前
1
0
使用mdBook 替代 gitbook。

###** 为什么要替代gitbook** gitbook 有个模板问题:如果md文件中有连续的大括号(比如:&{{父亲 40}}),gitbook会把{{ 父亲 40 }}中的父亲 40当做一个模板变量。如果这个变量不存在,会报...

王坤charlie
6分钟前
0
0
TL-A7HSAD采集卡硬件的处理器、NOR FLASH、DDR3

TL-A7HSAD是一款由广州创龙基于Xilinx Artix-7系列FPGA自主研发的高速数据采集卡,可配套广州创龙TMS320C6655、TMS320C6657、TMS320C6678开发板使用。该采集卡包含1个双通道250MSPS*12Bit的高...

Tronlong创龙
19分钟前
1
0
项目启动报fastjson版本可能过低

进行项目启动的过程中,之前都正常,这次启动突然就失败了: 查看日志说的是版本过低,后来查看官方网站版本,替换了最新版本: 选择了最新版本的1.2.60,1.2.62尝试后都不行,后来查看网上搜...

aiChuang
19分钟前
1
0
McDonald’s is using Alexa and Google to accepting job applications

McDonald’s today announced a new initiative the fast food chain is calling the “Apply Thru,” in which owners of Amazon Alexa or Google Assistant devices can begin job applic......

wowloop
22分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部