当前位置: 首页 > news >正文

C#,入门教程(22)——函数的基础知识

上一篇:

C#,入门教程(21)——命名空间(namespace)与程序结构的基础知识icon-default.png?t=N7T8https://blog.csdn.net/beijinghorn/article/details/124140653

一、函数的基本概念

一个软件的结构大体如下:

大厦application: a plaza
{
----有若干层namespace: have some levels
----{
--------每一层有若干房间class: level have some rooms
--------{
------------房间有一些东西attributes: rooms have some things
------------房间里面可以用这些东西搞一些事情functions: and can do somethings with somethings.
--------}
----}
}

函数与属性都是结构体、类的组成部分。
属性(字段)用于保存数据。
函数就是用数据处理,并得到一些记过的功能性程序模块。
函数既可以处理本类/结构体的数据,也可以处理外部的其他数据。

public class className
{public int AttName { get; set;} = 0;public string OutputAtt(){return String.Format("{0:D8}", AttName);}
}

二、函数的不同应用场景

1、有些函数“只进不出”

public void Step()
{Att += 1;
}

2、有些函数“只出不进”

public string Print()
{return String.Format("{0:D8}", Att);
}

3、有些函数“又进又出”

public string PrintD8(int a)
{return String.Format("{0:D8}", a);
}

a 称为“参数”。参数可以很多,用逗号分开即可。

public int Sum(int a, int b)
{return (a + b);
}

4、更复杂的数据

public int Sum(int[] a)
{int sum = 0;for(int i=0; i<a.Length; i++){sum += a[i];}return sum;
}

5、怎么得到多个计算结果?

public int[] Sum(int[] a)
{int sum = 0;int max = int.MinValue;int min = int.MaxValue;for(int i=0; i<a.Length; i++){sum += a[i];if(a[i] < min) min = a[i];if(a[i] > max) max = a[i];}return new int[3] { min, max, sum };
}

6、如果多个返回值类型不统一,怎么办?

public double Mean(int[] a, out int min, out int max, out int sum)
{sum = 0;max = int.MinValue;min = int.MaxValue;for(int i=0; i<a.Length; i++){sum += a[i];if(a[i] < min) min = a[i];if(a[i] > max) max = a[i];}return ((double)sum / a.Length);
}

7、修改参数的数据?

一般而言,参数仅仅作为原始数据传入函数,不能修改参数的数据。
需要一点点技术的定义。

public void MoveTo(ref int[] p, double rad, double angle)
{p[0] += rad * Math.Cos(angle * Math.PI / 180.0);p[1] += rad * Math.Sin(angle * Math.PI / 180.0);
}

三、关于函数的高级知识

1、重载 override 与 重写 new

2、委托 delegate 与 接口 interface

3、递归方法 Recurse Method

这些知识是后面会逐个讲解的,先列出目录。

四、关于函数的更多要点

1、每个函数不要写太多行!

2、只要是可能重复的,都写成函数(模块化!)

3、追求功能而不是性能的前提下,可用传入参数,而不是直接使用属性;

4、函数的名字要用全称的英语单词,不要简写或莫名其妙的,比如 AA BB WC。

下一篇:

C#,入门教程(23)——数据类型转换的一点基础知识icon-default.png?t=N7T8https://blog.csdn.net/beijinghorn/article/details/124187182
 

相关文章:

  • RPC和HTTP,它们之间到底啥关系
  • VsCode容器开发 - VsCode连接远程服务器上的docker
  • 【江科大】STM32:(超级详细)定时器输出比较
  • Ebay、SHEIN、亚马逊出口儿童滑梯CE认证标准EN71解析
  • CNAS中兴新支点——商用密码评测:保护信息安全的重要环节
  • 《Python数据分析技术栈》第03章 01 正则表达式(Regular expressions)
  • MySQL经典50题
  • 网络通信(15)-C#TCP客户端掉线重连实例
  • 使用Element中的input组件如何实现文字和输入框在一行显示
  • WEB前端IDE的使用以及CSS的应用
  • Mysql运维篇(二) 主从复制
  • 关于C#中的LINQ的延迟执行
  • 计算机网络复试
  • ASEPRITE使用笔记
  • Redis(六)发布订阅,不推荐
  • 10个确保微服务与容器安全的最佳实践
  • git 常用命令
  • iOS 系统授权开发
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Less 日常用法
  • MySQL用户中的%到底包不包括localhost?
  • PHP变量
  • PV统计优化设计
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Spring Boot MyBatis配置多种数据库
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • Vue 动态创建 component
  • 简单实现一个textarea自适应高度
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 强力优化Rancher k8s中国区的使用体验
  • 通过npm或yarn自动生成vue组件
  • 智能合约Solidity教程-事件和日志(一)
  • 阿里云重庆大学大数据训练营落地分享
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)memcache、redis缓存
  • .CSS-hover 的解释
  • .Net - 类的介绍
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET 读取 JSON格式的数据
  • .Net小白的大学四年,内含面经
  • .Net中间语言BeforeFieldInit
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @property括号内属性讲解
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [Ariticle] 厚黑之道 一 小狐狸听故事
  • [Big Data - Kafka] kafka学习笔记:知识点整理
  • [BZOJ 3531][Sdoi2014]旅行(树链剖分+线段树)
  • [BZOJ]4817: [Sdoi2017]树点涂色
  • [C/C++随笔] char与unsigned char区别
  • [C++] 统计程序耗时
  • [C++]C++入门--引用