当前位置: 首页 > 编程日记 > 正文

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

相关文章:

Linux很实用的命令查找软件安装目录

#whereis php #which php #php -v 查看版本号 差异自己去体会

Python 库突发 PyPI 危机!

‍‍整理 | 梦依丹出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;据 BleepingComputer 报道&#xff0c;Python 官方软件包存储库 PyPI 遭受了黑客攻击&#xff0c;攻击者通过注入垃圾邮件包的形式发起了洪水攻击。这些垃圾邮件及软件包用电影、电视节目名称命名&…

scala入门之代码补全

为什么80%的码农都做不了架构师&#xff1f;>>> 在scala的shell命令行中&#xff0c;我们可以使用像Linux那样的代码补全功能。Linux中是使用Tab键补全&#xff0c;scala的shell命令行也是使用这个键。例如&#xff0c;我们在“ssss”这个字符串上调用toUpperCase方…

pycharm第一个Python程序

print ("Hello word!"); 这是Python3.xx的语法&#xff01;

C#枚举系统安装的所有打印机

在下面的程序中我们将把系统中所安装的打印机用列表框列出来&#xff0c;同时为默认打印机设置缺省值。 在下面的程序中我们用到了两个主要的类&#xff0c;把所有的打印机列表出来用到了PrinterSettings 类,获取系统默认打印机用到了PrintDocument 类&#xff0c;下面我们就动…

编译安装linux内核步骤

编译安装linux内核步骤&#xff1a; 一.获取内核源码 源码网址&#xff1a;www.kernel.org 二.解压内核源码 首先以root帐号登录&#xff0c;然后进入/usr/src子目录。如果用户在安装Linux时&#xff0c;安装了内核的源代码&#xff0c;则会发现一个linux-x.y.z的子目录。该目录…

遏制企业数据泄露之殇,大咖切磋云安全的攻防之道

整理 | 寇雪芹出品 | AI 科技大本营&#xff08;ID:rgznai100&#xff09;5 月 7 日&#xff0c;美国最大燃油管道、东部地区油气输送主动脉 Colonial Pipeline 计算机系统被黑客入侵和勒索&#xff0c;导致美国17个州和华盛顿特区进入紧急状态。这次黑客入侵无异于一记重拳&am…

【NOIP2016】愤怒的小鸟

Description Kiana最近沉迷于一款神奇的游戏无法自拔。 简单来说&#xff0c;这款游戏是在一个平面上进行的。 有一架弹弓位于(0,0)处&#xff0c;每次Kiana可以用它向第一象限发射一只红色的小鸟&#xff0c;小鸟们的飞行轨迹均为形如y ax^2 bx的曲线&#xff0c;其中a, b是…

“智能”基石:人工智能数据标注与训练,是决定智能时代的第一步

记者 | 邓晓娟 2021年5月20日~23日&#xff0c;由深圳市科学技术协会、深圳市商务局、深圳市福田区人民政府共同指导&#xff0c;深圳市科技开发交流中心、深圳市人工智能行业协会联合主办的2021第二届深圳国际人工智能展开幕式暨智能制造创新高峰论坛在深圳会展中心&#xff0…

C#中对POP3邮件解码

Base64和下面将要介绍的Quoted-Printable都属于MIME &#xff08;多部分( multi-part)、多媒体电子邮件和 WWW 超文本的 一种编码标准&#xff0c;用于传送诸如图形、声音和传真等非文本数 据&#xff09;。MIME定义在RFC1341中。 Base64是现今在互联网上应用最多的一种编码…

php 命中算法

function hitted($rate,&$num){if (is_string($rate))$rate ( float ) $rate;if ($rate > 1)throw new ArgumentException(传入的概率值 $rate 必须是 0~1 之间的浮点数或整数(0|1)。, -1);$r 100 * $rate;$v mt_rand(1, 100);$num $v;if ($v < $r)return true;r…

iframe 数据传递

1.使用iframe是父页面与子页面的数据传递2.使用iframe 跳转部分研究处理ios兼容性 2.1 safai 会阻止iframe里的window.open()函数 采用了讲需要跳转的页面传向父页面&#xff0c;让父页面进行处理跳转 //子页面向父页面传递信息 parent.postMessage({变量名: 数据}, *);//子页面…

C#调用控制面板选项

因为C#是由Microsoft公司推出的&#xff0c;所以它对Microsoft的所有产品的兼容性与相互操作性是其它公司开发出的编程语言所不及的。Microsoft开发的Windows操作系统与C#之间的关系也非常紧密。从而实现了C#对Windows的无缝操作。 下面&#xff0c;我们就以“C#对Windows控制面…

2021 火爆技术人朋友圈的实时音视频 RTC 你 Pick 了嘛?

5月27日20点&#xff0c;第 13 期「大咖来了」&#xff01; CSDN 副总裁于邦旭、融云 CTO 任杰、即构科技副总裁刘莉&#xff0c;多方视角探讨 RTC 超级风口与机遇&#xff0c;还有众多精美礼品等你拿&#xff01; 立即戳&#xff1a;https://live.csdn.net/room/csdnnews/cn…

查询/新建/修改本地用户和组

通过ADSI新建用户user2&#xff1a; 1 #创建新用户&#xff0c;创建完成后的新用户不隶属于任何组2 $computerName$env:computername3 #定义用户名、密码、描述信息4 $username"user2"5 $userpass"password"6 $userdesc"description"7 $ADSI [A…

支付宝接入参考博客

http://www.cnblogs.com/stulzq/p/7606164.html转载于:https://www.cnblogs.com/baiqian/p/7609443.html

活动目录的优势

活动目录的优势 Active Directory服务提供了单一登入的能力和一个所有基础设施相关信息的集中储存机制&#xff0c;大幅度的简化了使用者和计算机的管理&#xff0c;同时提供优越的网络资源存取能力。我在本文中主要讲述一下Microsoft Windows Server 2003 中的 Active Directo…

C#编写一个抓网页的应用程序

本文利用C#和.NET提供的类来轻松创建一个抓取网页内容源代码的程序。HTTP是WWW进行数据访问最基本的协议之一&#xff0c;在.NET的基本类型库类中提供了两个对象类&#xff1a;HTTPWebRequest和HTTPWebResponse&#xff0c;分别用来向某资源发送请求和获得响应。为了得到一个资…

从粗放到精细,如何用AI技术实现信息流广告投放的降本增效

中国的SaaS在经历2020年全球爆发的疫情之后&#xff0c;迎来了前所未有的高光时刻&#xff0c;或者说蛰伏数年终于迎来了爆发。 2021年5月20日&#xff0c;ZTouch&#xff0c;北京中量质子网络信息科技有限公司旗下的企业数智化服务平台&#xff0c;发布了广告数智投放平台Dar…

广义动量定理之作用点的应用分析

广义动量定理之作用点的应用分析 从广义动量定理FαtnmV的角度说&#xff0c;改变作用点&#xff0c;就可以改变成果nmV。作用点派以调整作用点的准确度作为达成目的的手段。 作用点应用于聚焦理论 理论简介&#xff1a;聚焦理论使企业集中力量于某几个细分市场&#xff0c;主攻…

将DBF,XLS,XML,MDB文件导入C#DataGrid的方法

以下的源码里分别给出了将DBF,XLS,XML,MDB文件导入C#DataGrid的方法,供各位参考。 //PutInDataSet.cs的源码 using System; using System.Data.Odbc; using System.Data.OleDb; using System.Data; using System.Collections; namespace PutInDataSet { /// <summary…

超星未来发布新一代高级别自动驾驶车载计算平台

5月25日&#xff0c;由中国汽车工程学会、国家智能网联汽车创新中心主办的第八届国际智能网联汽车技术年会&#xff08;以下称“CICV 2021”&#xff09;在北京亦创国际会展中心举办。超星未来联合创始人、首席技术官梁爽博士应邀出席发表演讲&#xff0c;并在主论坛上发布了超…

Effective Java - Item 1: Consider static factory methods instead of constructors

考虑使用静态工厂方法来替代构造方法, 这样的做的好处有四点. 1. 更好的表意 有的构造方法实际上有特殊的含义, 使用静态工厂方法能更好的表达出他的意思. 例如 BigInteger(int, int, Random) , 它返回一个可能是素数的 BigInteger. 使用工厂方法 BigInteger.probablePrime 可以…

服务器和普通用户电脑的区别

服务器和普通用户电脑的区别 1、硬件方面 经常收到戴尔的广告邮件&#xff0c;看到里面的服务器配置不怎么高&#xff0c;可是价格都很贵。想知道&#xff0c;服务器和普通电脑的区别在哪里呢&#xff1f; 目前使用服务器的站长和企业也比较多&#xff0c;也许有人会觉得二者差…

C#:消息队列应用程序

文章“MSMQ&#xff1a;可伸缩、高可用性的负载平衡解决方案&#xff08;英文&#xff09;”介绍了一种解决方案&#xff0c;用于高可用性消息队列 (MSMQ) 的可伸缩负载平衡解决方案体系结构。此解决方案中涉及了一种将 Windows 服务用作智能消息路由器的开发方案。这样的解决方…

从腾讯实时音视频发家史,看爆发中的 RTC 将何去何从

作者 | 夕颜头图 | 下载于视觉中国出品 | AI 科技大本营&#xff08;ID:rgznai100&#xff09;早在2015年左右&#xff0c;直播和短视频的兴起渗透进普通人的日常生活&#xff0c;人们信息消费的内容已经开始从文字向语音、视频信息转变。而疫情期间全民“家里蹲”的窘境&#…

山寨c 标准库中的getline 函数

2019独角兽企业重金招聘Python工程师标准>>> 要山寨一个函数&#xff0c;只要看两点 原版函数的形参。原函数的返回值。下面是函数原型。 ssize_t getline(char **lineptr, size_t *n, FILE *stream); 函数返回值。 RETURN VALUE On success, getline() and getde…

封ip对爬虫的影响

今天要聊的是封ip对爬虫的影响。我认为封ip能拒绝一部分网络请求&#xff0c;减轻服务器的压力&#xff0c;但是如果要是建立一个好的ip池&#xff0c;封对爬虫的影响不大。 爬取国内一个拍卖公司的网站&#xff0c;刚开始用多进程下载&#xff0c;每分钟能爬取 1000个页面&…

Python 的一万种用法:制作 Web 可视化页面

来源 | 法纳斯特头图 | 下载于ICphoto一谈到Web页面&#xff0c;可能大家首先想到就是HTML、CSS或JavaScript。本次小F给大家介绍一下如何用Python制作一个数据可视化网页&#xff0c;使用到的是Streamlit库&#xff0c;轻松将一个Excel数据文件转换为一个Web页面&#xff0c;提…

【Go语言】LiteIDE使用的个人使用方法

Go语言开发 可以使用的IDE很多 &#xff08;Goclipse&#xff0c;sublime&#xff0c;notepad&#xff0c;vim等&#xff09;目前使用的最顺手的就是LiteIDE了 但是尽管这样&#xff0c;一开始使用LiteIDE也有很多不习惯的地方&#xff0c;下面主要总结了一些自己喜欢的用法 首…