C#编程(十二)----------函数
类和结构
类和结构实际上都是创建对象的模板 ,每 个对象都包含数据 ,并 提供了处理和访问数据的方法。
类定义了类的每个对象 (称 为实例 )可 以包含什么数据和功能 。
例如 ,如 果 一 个类表示 一 个顾客 ,就可以定义字段 CustomerID、 FirstName、 LastNane和 Address,以 包含该顾客的信息 。还可以定义处理在这些字段中存储的数据的功能 。 接着 ,就 可以实例化表示某个顾客的类的对象 ,为 这个实例设置相关字段的值 ,并 使用其功能 。
例如有一个PgoneCustomer类
class PgoneCustomer
{
public const string DayOfSendingBill=”Monday”;
public int CustomerID;
public string FirstName;
public string LastName;
}
结构
struct PgoneCustomerStruct
{
public const string DayOfSendingBill=”Monday”;
public int CustomerID;
public string FirstName;
public string LastName;
}
结构与类的区别使他们在内存中的存储方式,访问方式(类是存储在堆(heap)上的引用类型,而结构的存储在栈上的值类型)和他们的一些特征(如结构不支持继承).较小的数据类型使用结构可提高性能.但在语法上,结果和类很相似.主要区别是使用关键字struct代替class来声明结构.结构的实例都分布在栈上,类的实例分布在托管堆上.
类的结构都使用关键字ner来声明实例:这个关键字穿件对象并对对象进行初始化.
PhoneCustomer myCustomer=new PhoneCustomer();
PhoneCustomerStruct myCustomer2=new PhoneCustomerStruct();
多数情况下,类的使用较多,类中的数据和函数叫做成员.类还可以包含嵌套的类型.成员的可访问性可以是:public,private,intermal,protected.
数据成员是包含类的数据----字段,常量和事件的成员.数据成员可以是静态数据.类成员总是实例成员,除非用static进行显示的声明.一旦实例化PhoneCustomer对象,就可以实用语法Object.ieldName来访问这些字段,如:
PhoneCustomer Customer1=new PhoneCustomer();
Customer1.FirstName=”syx”;
使用const关键字来声明常量.如果声明为public,就可以在类的外部访问它.
class PhoneCustomer
{
public const string DaySendingBill = “Monday”;
public int CustomerID;
public string FirstName;
public string lastName;
}
事件是类的成员,在发生某些行为(如改变类的字段火属性,或者进行了某种形式的用户交互操作)时,他可以让对象通知调用方.客户可以包含所谓的”事件处理程序”的代码来响应该事件.
函数成员
函数成员提供了操作类中数据的某些功能 ,包括方法、属性、构造函数和终结器,运算符以及索引器.
方法
注意,正式的C#术语区分函数和方法.在C#术语中,”函数成员”不仅包含方法,而且也包含类或结构的一些费数据成员,如索引器,运算符,构造函数和析构函数等.
1.方法的声明
[修饰符] 返回值类型 函数名 (参数列表)
{
函数代码
}
2.调用方法
例如有一个方法:
public void ShowHello(string name)
{
Console.WriteLine(name+”say : hello”);
}
调用的时候
static void Main()
{
ShowHello(“zhangsan”);
}
3.给方法传递参数
就是参数列表里需要什么类型,需要几个就传递几个
4.ref, out, params的使用
ref的特点是有进有出,即在传递参数之前就已经对它进行赋值,在传入方法体时,是将该数的地址传了进来,如果对其进行相应的赋值操作,直接改的是地址里的值,所以,当该方法执行完,该数的值也就跟着改变了。
代码如下:
static void Main(string[] args) { int i = 10; FF( ref i); Console.WriteLine(i); }
static void FF(ref int i) { i = i + 1; }
如果没有ref
static void Main(string[] args)
{
int i = 10;
FF(i);
Console.WriteLine(i);
Console.ReadKey();
}
static void FF(int i)
{
i = i + 1;
}
ref的作用这样一比较是不是很清楚了.ref和C中的指针相似.
而out与ref的唯一区别是,在方法接收参数后,对它进行初始化(如果没有初始化,将会报错的),其余的用法都和ref一样。
static void Main(string[] args) { int i ; FF( out i); Console.WriteLine(i); }
static void FF(out int i) {
i=10; //如果没有这个赋值,系统将会报错的 i = i + 1; }
out的使用案例
public static void outfun(out string str) { str = "test"; //必须在函数体内初始, 如无此句,则下句无 法执行,报错 str += " fun"; }
static void Main(string[] args) { string test1 = "syx"; string test2; //没有初始 outfun( out test1 ); //正确,但值syx无法传进去 outfun( out test2 ); //正确
Console.Read(); }
在调用含有out和ref函数的参数的时候,调用的时候需要显式的指明out或者ref.out存在的意义,个人认为是返回多个值.
声明一个函数,在函数结束的时候,我想得到i改变后的值,也想得到j改变后的值,就可以使用out关键字.但是在调用的时候,需要实参前面加上关键字out.
public static int outfun(ref int i,out int j)
{
i = 10;
j = i+10;
return i;
}
static void Main(string[] args)
{
int a = 1;
int b;
Console.WriteLine(a + " " + b);
Console.ReadKey();
}
ref是有进有出,而out是只出不进。
为了将方法声明为可以接受可变数量参数的方法,我们可以使用params关键字来声明数组,如下所示:
public static Int32Add(params Int32[] values)
{
Int sum = 0;
for (Int32 x = 0; x < values.Length; x++)
{
sum += values[x];
}
return sum;
}
只有方法的最后一个参数才可以标记params,该参数必须标识一个一维数组,但类型不限。对方法的最后一个参数传递null或者0个数目的数组的引用都是合法的.
在调用的时候,即可以传递一个数组,也可以传递一组数.例如:
static void Main(string[] args)
{
int sum = GetSum(1, 2, 3, 4, 5, 6, 7, 8);
Console.WriteLine(sum);
int[] arrs = { 1, 2, 3, 4, 5, 6 };
int sum2 = GetSum(arrs);
Console.WriteLine(sum2);
Console.ReadKey();
}
最后总结一下ref,out,param存在的意义.
ref:相当于C中的指针,让参数传址引用.
out:返回多个数.
param:支持可变参数,但是一定要放在最后.
转载于:https://www.cnblogs.com/FinleyJiang/p/7602132.html
C#编程(十二)----------函数相关推荐
- Vue实现图形化积木式编程(十二)
执行Blockly生成代码 路由 下一篇 历史回顾 Babylon.js部分 Blockly部分 前言 最终实现效果 本文内容 实现思路 问题分析 问题 原因 不优雅解决 优雅解决 完整代码 后续计划 ...
- 面向对象编程(十二)——final关键字
阅读目录 final关键字 final修饰变量 final修饰方法 final修饰类 Final && Static 总结 final关键字 Java关键字final有"这是 ...
- 深入理解PHP内核(十二)函数-函数的定义、传参及返回值
原文链接:http://www.orlion.ga/344/ 一.函数的定义 用户函数的定义从function 关键字开始,如下 function foo($var) { echo $var; } 1 ...
- 零基础入门python3.7 ——基础知识总结(十二) 函数进级
python中的函数调用时除了对位传参. 关键字传参. 默认参数以外还提供了以下传参方式. 一.可变参数 顾名思义可变参数就是参数的个数是可变的,可以是任意1个或者多个,由于参数的数量不确定所以我们要 ...
- 【C语言进阶深度学习记录】三十二 函数指针与使用函数指针实现回调函数
回调函数是非常重要的概念 文章目录 1 函数的类型 2 函数指针 2.1 函数指针的使用 2.2 使用函数指针实现回调函数 3 总结 1 函数的类型 跟以前学数组的时候是一样的,C语言中的数组是有自己 ...
- 十二个球称三次C语言编程,十二个球,有一个不知轻重,现有一个天平,称三次,找出此球!...
平均分成A.B.C三组,每组4个: 第一秤:A.B两组先分别放天平左右: 情况一:平衡.则问题出在C组,A.B组共8个为标准球. 第二秤用3个标准球和C组的3个球对比, 如果第二秤平衡,剩下的一个就是 ...
- Swift编程十二(方法)
案例代码下载 方法 方法是与特定类型相关联的函数.类,结构和枚举都可以定义实例方法,这些方法封装了用于处理给定类型的实例的特定任务和功能.类,结构和枚举也可以定义类型方法,它们与类型本身相关联.类型方 ...
- Swift函数式编程十二(表格应用)
代码地址 这个示例为希望被解析的表达式编写解析器,并为这些表达式编写一个求值器,然后将其嵌入界面中. 解析 基于解析器组合算子中的算术表达式解析器,引入额外的抽象层级. 之前,编写的解析器会直接返回计 ...
- 通过例子学TLA+(十二)-- 函数与实例
函数和实例 函数 TLA+中除了 数字,字符串,布尔值,模型值 4种基本类型外,还有两种复杂类型,分别为集合和函数.函数构成了所有实用复杂类型的基础. 函数的形式看起来跟之前介绍过的操作符是一样的.函 ...
- C语言编程>第二十二周 ④ 从键盘输入一组小写字母,保存在字符数组str中,请补充fun函数,该函数的功能是:把字符数组str中字符下标为偶数的小写字母转换成对应的大写字母,结果仍保存在原数组
例题:从键盘输入一组小写字母,保存在字符数组str中,请补充fun函数,该函数的功能是:把字符数组str中字符下标为偶数的小写字母转换成对应的大写字母,结果仍保存在原数组中. 例如,输入 " ...
最新文章
- Google和Facebook为什么不用Docker?
- 多线程Java Socket编程示例(转)
- 第二届「机器智能前沿论坛」强势来袭,众多机器学习大咖邀你共话AI未来!
- PHP生成Mysql数据字典
- [蓝桥杯][2018年第九届真题]整理玩具(树状数组)
- XDJM的情意比山高,比海深!!
- 小程序 node.js mysql_基于Node.js+MySQL开发的开源微信小程序B2C商城(页面高仿网易严选)...
- leetcode剑指 Offer 47. 礼物的最大价值(动态规划)
- Axure5.1不能输入中文问题.
- 查看mysql日志post_(转)MySQL 日志组提交
- vijos 1071 01背包+输出路径
- 生活在继续,梦,也要继续
- web系统找回密码流程
- 4-2017-12-2-2约瑟夫环
- GNS3环境搭建与测验实战图文详解
- WPS Office 11.5.5 for Android 8848钛金
- hash算法和常见的hash函数
- python pip在哪个文件夹运行_如何安装python与pip-百度经验
- mysql数据库设计与应用答案智慧树_智慧树_MySQL数据库设计与应用_答案全部
- DOM4J解析XML文档