方法和传递参数_ref和out的用法详细讲解

上传人:沈*** 文档编号:163911019 上传时间:2022-10-23 格式:DOC 页数:4 大小:68.50KB
收藏 版权申诉 举报 下载
方法和传递参数_ref和out的用法详细讲解_第1页
第1页 / 共4页
方法和传递参数_ref和out的用法详细讲解_第2页
第2页 / 共4页
方法和传递参数_ref和out的用法详细讲解_第3页
第3页 / 共4页
资源描述:

《方法和传递参数_ref和out的用法详细讲解》由会员分享,可在线阅读,更多相关《方法和传递参数_ref和out的用法详细讲解(4页珍藏版)》请在装配图网上搜索。

1、ref和out的应用要深刻理解ref和out的应用,不仅从语法的角度,更要从面向对象【OO】的角度去理解和把握。一、首先应该真正理解“方法”方法:1、语法的角度:略2、OO的角度:方法是对现实行为或操作的一种模拟比如:学生的上课,考试,面试等行为都可以用方法来模拟,【方法包含普通方法,虚方法,抽象方法,】二、这里我们要重点讨论方法的返回值1、有些方法不需要返回值,比如:实例1:我今天心情好,下班后去逛超市,但是不买任何东西实例1分析:方法构成不需要花钱方法无参数不买任何东西方法无返回值实例1可以用以下方法来模拟void 逛超市()/随意逛逛2、有些方法需要返回值也需要参数,比如:实例2:我今天

2、下班后去超市买一箱牛奶实例2分析:方法构成需要花*出*钱方法有参数买*回*一箱牛奶方法有返回值实例2可以用以下方法来模拟int 逛超市(double 钱)/花*出*钱 return 一箱牛奶;三、ref ,out的用法对于实例2:我今天下班后去超市买一箱牛奶实际我们有很多模拟的方式,如:方式1,方式2,方式3方式1:用*有*参数*有*返回值的方法来模拟,如上方法构成需要花*出*钱方法有参数,用一个参数默认参数,传入值买*回*一箱牛奶方法有返回值用return返回值,传出值方式2:用*有*参数*没有*返回值的方法来模拟,让函数增加一个out参数,让这个参数起到返回值的作用即传出值。方法构成需要花

3、*出*钱方法有参数, 一个为默认参数 传入值 另一个为out参数传出值买*回*一箱牛奶方法有返回值不用return返回值,而用out参数返回值,传出值实例2还可以用以下方法来模拟:void 逛超市(float 钱, out int 买的东西)/花*出*钱 买的东西= 一箱牛奶;方式3:方式2模拟这件事情用了两个参数,能不能少用一个参数呢。只用一个参数既起到传入也起到传出值的作用。OK!选用ref 参数方法构成需要花*出*钱方法有参数, 只有一个ref参数传入值和传出值买*回*一箱牛奶方法有返回值不用return返回值,而用ref参数返回值,传出值实例2还可以用以下方法来模拟:void 逛超市(

4、ref double 钱_买的东西)/花*出*钱 钱_买的东西= 一箱牛奶;四、ref ,out何时用,用在哪里1、是一种可选的解决方案:做一件事情,往往有很多方法可以选择,如果一个方法需要返回值,我们可以选择ref或out参数,如上面的例子。如果只需要方法传出值,选out参数即可如果需要方法既传入值也传出值,选ref参数2、是一种最好的解决方案:比如:某人面试了一家单位,他不但想知道是否要他,还想知道要他或不要他的原因再如:连接数据库,想知道连接是否成功,如果连接不成功,还想知道不成功的原因生活中实例多如牛毛:去超市买东西,交给收款员货币,你得到的不仅是要买的物品,还有找零,赠品,总之,当一

5、个函数需要返回多种不同类型值的时候,往往可以使用ref ,out参数,如bool Con_DB_Cle(string conStr,ref string why) try / why=; return true; catch(Exception e) / why= e.ToString(); return false; 五、ref ,out用在哪里,让我们看看类库,类库用的不多啊!例子1:System.:.Uri.TryCreate 方法:.: 使用指定基和相对 Uri 实例创建一个新的 Uri。如果成功创建了 Uri,则方法返回值为 true;否则为 false。public static

6、bool TryCreate(Uri baseUri,Uri relativeUri,out Uri result /此方法返回时,包含从 baseUri 和 relativeUri 构造的 Uri)public static bool TryCreate(string uriString,UriKind uriKind,out Uri result) 例子2:protected override bool System.Data.SqlClient.SqlDataAdapter .GetBatchedRecordsAffected(int commandIdentifier, out int

7、 recordsAffected, out System.Exception error)六、ref ,out的使用原则【依据VS.NET2008 msdn.NET Framework 开发人员指南】方法参数可以通过值,通过引用传递,也可以作为输出参数传递。通过值传递参数时,方法获取调用方数据的副本,但不能改变调用方的数据副本。通过引用传递参数时,方法获取指向调用方数据的指针。此数据与调用方共享。如果方法对引用参数做出更改,则这些更改是对调用方的数据进行的。使用引用参数时,方法可以使用数据的初始状态。输出参数与引用参数类似,不同之处在于,输出参数以独占方式用于向调用方返回数据,而引用参数可用于

8、将数据传入方法,也可用于从方法中接收数据。 避免使用输出参数或引用参数。使用定义输出参数或引用参数的成员需要开发人员理解指针、值类型和引用类型之间的细微差别以及输出参数和引用参数之间的初始化差异。不要通过引用传递引用类型。通过引用传递一个对象使方法能够用不同的实例替换该对象。在大多数情况下,方法应使用提供的对象,而不应将其替换。对于此规则,有一些少量的例外(例如,可用于交换引用的方法)。 部分版权所有 2005 Microsoft Corporation。保留所有权利。 部分版权所有 Addison-Wesley Corporation。保留所有权利。 有关设计指南的更多信息,请参见 Krzy

9、sztof Cwalina 和 Brad Abrams 编著、Addison-Wesley 于 2005 年出版的“Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries”(框架设计指南:可重用 .NET 库的约定、术语和模式)。七、ref ,out的区别?经典面试题ref ,out的区别?简记1作用ref参数既可以由方法调用端向方法传入值,也可以由方法向方法调用端传出值传入传出out 参数不能由方法调用端向方法传入值,但可以由方法向方法调用端传出值只传出2语法ref参数必须在方法调用端初始化先初始化out参数在方法调用端可以不初始化【也可以初始化】但在方法体内必须初始化后初始化

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!