1.函数参数前的修饰符 params ,ref ,out
params修饰的数据类型只能数组,用于参数不固定时;且此参数位于所有形式参数的最后;
  1. public static int GetMax(params int[]args)
  2. {
  3. if(params==null)throw new exception("请传几个值!");
  4. int max=args[]
  5. foreach(int i in args)
  6. {
  7. if(max<args[i])
  8. max=args[i]
  9. }
  10. return max;
  11. }
  12. static void main(string []args)
  13. {
  14. int i=GetMax(,,,............);//参数也可以是数组
  15. Console.WriteLine("最大值为:"+i);
  16. }
 注:params和未知大小的数组参数的区别是:1.params参数,可以不用传参,该参数是可选的;2.可以传递任意个数的对象,而不用封装成数组
 
ref和out修饰的参数作用:将参数传递类型转由值类型转换为引用类型,这是所传递的参数就有参数的副本变为参数的地址;
  1. 由于ref和out同属按引用传递,所以不能通过ref和out的不同的实现重载。即不能定义两个完全一样的方法,仅有参数是ref和out的不同。
  2. 不适用ref或者out修饰的参数,不一定就是值传递。如数组、集合都是引用类型,故不必使用ref修饰,也是按引用传递的。
 
第一种参数无ref修饰;
 

  1. public static void swap(int m,int n)//参数无ref修饰
  2. {
  3. int i=m;
  4. m=n;
  5. n=i;
  6. }
  7. static void main(string []args)
  8. {
  9. int m=;
  10. int n=;
  11. swap(m,n);
  12. console.WriteLine("m="+m.Tostring,"n="+n.Tostring);//m=2,n=3此时只是将m.n的值复制一份传递给swap方法,交换的是他们的副本;
  13. }
 
第二种参数有ref修饰;注意:形式参数和实际参数前都必须有ref修饰。

  1. public static void swap(ref int m,ref int n)//参数ref修饰
  2. {
  3. int i=m;
  4. m=n;
  5. n=i;
  6. }
  7. static void main(string []args)
  8. {
  9. int i=;
  10. int j=;//必须要赋值,这样它才会在内存中有地址;
  11. swap(ref i,ref j);
  12. console.WriteLine("i="+i.Tostring,"j="+j.Tostring);//i=3,j=2此时只是将i.j的地址传递给swap方法,交换的是他们的地址,所有数值做相应的改变;
  13. }
这次之所以成功是因为ref的贡献。参数按引用类型传递,则i和m,j和n共享一块内存空间。在swap方法内部对m,n的值进行了修改,即相当于对i和j的值进行了修改,并且当swap方法内部对m,n的值进行了修改,即相当于对i和j进行了修改,并且当swap方法执行完毕时,该变化仍能维持,即顺利地完成了数值的交换。 
 
如果参数类型是数组,则不需要加ref,就可以实现交换,因为数组本来就是引用类型;
 
out让函数可以输出多个值

  1. public bool Login(string Account,string Pwd,out Msg)
  2. {
  3. bool flag=true;
  4. if(Account=="admin")
  5. {
  6. if(Pwd=="pwd")
  7. {
  8. Msg="登陆成功";
  9. }
  10. else
  11. {
  12. Msg="密码错误";
  13. flag=flase;
  14. }
  15. }
  16. else
  17. {
  18. Msg="账号错误"
  19. flag=false;
  20. }
  21. return flag;
  22. }
  23. static void main(string []args)
  24. {
  25. string Msg;//获取返回来的信息内容,不需要赋值;
  26. bool flag=Login(admin,pwd,out Msg);
  27. }
  • out修饰的参数,不要求传递前赋初值(其实赋了也没有用),凡是用out修饰的参数,在方法内部都认为没有赋初值。
  • out修饰的参数,需要强制在方法内部给它赋值以便将该值带到外面,而ref修饰的参数则无此限制。
  • out修饰的参数,其典型的应用如用于返回多个值,例如方法int.TryParse(参数1,out参数2),参数2即为out修饰,用于将转换的结果带到方法外面。整个方法的返回值为bool,表明是否转换成功,该函数可以用于判断用户输入的是否为整型数值。

2.static修饰符


3.访问修饰符

密封类:更高效,不可以被继承,密封类和密封方法,在方法和类前声明为sealed。对于类来说,这表示不能继承该类;对于方法来说,这表示不能重写这个方法。
 
类成员默认修饰符为:private ;类默认访问修饰符为:internal,只在同一个程序集内可以访问
 
 
 

 可参考:https://msdn.microsoft.com/zh-cn/library/6tcf2h8w.aspx

    http://zhidao.baidu.com/link?url=-GZznRq_1QigvLgfpUxzsVIQxI8xJeFngfFceHOko9Pa-cpcouII6jgPRR8F1-vrTTQ7rCJdz0p5UeuE3lMxP_

    http://www.cnblogs.com/Athrun/archive/2007/11/16/961137.html

C#深入浅出 修饰符(二)的更多相关文章

  1. 深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)

    访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ...

  2. 从零开始学 Web 之 Vue.js(二)过滤器,按键修饰符,自定义指令

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  3. [原创] 基础中的基础(二):C/C++ 中 const 修饰符用法总结

    在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家梳理一下知识,给大家一点点帮助.作者是菜鸟一 ...

  4. 乐字节Java反射之二:实例化对象、接口与父类、修饰符和属性

    大家好,小乐继续接着上集:乐字节Java反射之一:反射概念与获取反射源头Class 这次是之二:实例化对象.接口与父类.修饰符和属性 一:实例化对象 之前我们讲解过创建对象的方式,有new .克隆.反 ...

  5. MySQL 聚合函数(二)Group By的修饰符——ROLLUP

    原文为MySQL 5.7 官方手册:12.20.2 GROUP BY Modifiers 一.ROLLUP 修饰符的意义 GROUP BY子句允许添加WITH ROLLUP修饰符,该修饰符可以对分组后 ...

  6. [002] - JavaSE面试题(二):基本数据类型与访问修饰符

    第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [002] - JavaSE面试题(二):基本数据类型与访问修饰符 第1问:Java的数据类型有哪 ...

  7. Java基础知识回顾之二 ----- 修饰符和String

    前言 在上一篇中,回顾了Java的基本数据类型 ,这篇就来回顾下Java中的一些修饰符以及String. 修饰符介绍 Java修饰符主要分为两类: 访问修饰符 非访问修饰符 其中访问修饰符主要包括 p ...

  8. python学习day20 面向对象(二)类成员&成员修饰符

    1.成员 类成员 类变量 绑定方法 类方法 静态方法 属性 实例成员(对象) 实例变量 1.1实例变量 类实例化后的对象内部的变量 1.2类变量 类中的变量,写在类的下一级和方法同一级. 访问方法: ...

  9. C#编程(二十四)----------修饰符

    修饰符 修饰符即应用于类型或成员的关键字.修饰符可以指定方法的可见性,如public或private,还可以指定一项的本质,如刚发的vritual或abstract. 可见性的修饰符 修饰符 应用于 ...

随机推荐

  1. UVA 10679 I Love Strings

    传送门 题目大意 给定文本串$S$和若干模式串$\{T\}$, 对每个模式串$T$, 询问$T$是否为$S$的子串. Solution 裸的AC自动机, 也可以用后缀数组做. P.S. 这题数据很弱, ...

  2. UVa 7146 Defeat the Enemy(贪心)

    题目链接: 传送门 Defeat the Enemy Time Limit: 3000MS     Memory Limit: 32768 KB Description Long long ago t ...

  3. Markdown的使用简介

    以前有摘抄过,然而onenote速度感人,现在又主要用Linux,所以在这里备份一下,好方便用 Linux下推荐remakeble软件,或者直接sublime text,再或者vim,反正我不会ema ...

  4. Linux 命令之 Navicat 连接 Linux 下的Mysql数据库

    2016年12月7日18:44:06 -====------------------------  GRANT ALL PRIVILEGES ON *.* TO 'itoffice'@'%' IDEN ...

  5. 【Alpha版本】冲刺-Day7

    队伍:606notconnected 会议时间:11月15日 会议总结 张斯巍(433) 今天安排:上传界面设计 完成度:95% 明天计划:回收站界面设计 遇到的问题:无 感想:从一开始界面风格就要确 ...

  6. Linux命令:简单函数调用

    脚本编程之函数: function: 功能       结构化编程,不能独立运行,需要调用时执行,可以被多次调用 1.定义一个函数:function FUNCNAME {  command} FUNC ...

  7. BZOJ3207: 花神的嘲讽计划Ⅰ

    显然hash,然后stl随便搞. #include<bits/stdc++.h> #define N 100005 using namespace std; typedef unsigne ...

  8. NSXMLParser解析本地.xml数据(由于like7xiaoben写的太好了,我从她那里粘贴过来的)

    NSXMLParser解析简要说明 .是sax方法解析 .需要创建NSXMLParser实例 (alloc) 并创建解析器 (initWithData:) 为解析器定义委托 (setDelegate: ...

  9. socket编程--socket模块介绍

    socket也称作'套接字,用于描述IP地址和端口,是一个通信的终点. socket起源于Unix,而Unix/Linux基本哲学之一就是"一切皆文件",对于文件用[打开][读写] ...

  10. 10月16日上午MySQL数据库作业设计表解析

    作业设计表:多张表存储学生成绩及各种信息 需要从表里面体现: 关于学生的:代号 姓名 性别 年龄 班级 关于课程的:代号 名称 关于老师的:代号 姓名 关于成绩的:例如:闫超--网页--90 要能查看 ...