C#深入浅出 修饰符(二)

1.函数参数前的修饰符 params ,ref ,out

params修饰的数据类型只能数组,用于参数不固定时;且此参数位于所有形式参数的最后;

public static int GetMax(params int[]args)
{
        if(params==null)throw new exception("请传几个值!");
        int max=args[0]
        foreach(int i in args)
        {
            if(max<args[i])
                max=args[i]
        }
        return max;
}
 static void main(string []args)
{
        int i=GetMax(1,2,3,4............);//参数也可以是数组
        Console.WriteLine("最大值为:"+i);
}

ref和out修饰的参数作用:将参数传递类型转由值类型转换为引用类型,这是所传递的参数就有参数的副本变为参数的地址;

  1. 由于ref和out同属按引用传递,所以不能通过ref和out的不同的实现重载。即不能定义两个完全一样的方法,仅有参数是ref和out的不同。
  2. 不适用ref或者out修饰的参数,不一定就是值传递。如数组、集合都是引用类型,故不必使用ref修饰,也是按引用传递的。

第一种参数无ref修饰;

 

public static void swap(int m,int n)//参数无ref修饰
{
        int i=m;
        m=n;
        n=i;
}
static void main(string []args)
{
        int m=2;
        int n=3;
        swap(m,n);
        console.WriteLine("m="+m.Tostring,"n="+n.Tostring);//m=2,n=3此时只是将m.n的值复制一份传递给swap方法,交换的是他们的副本;
}

第二种参数有ref修饰;注意:形式参数和实际参数前都必须有ref修饰。

public static void swap(ref int m,ref int n)//参数ref修饰
{
        int i=m;
        m=n;
        n=i;
}
static void main(string []args)
{
        int i=2;
        int j=3;//必须要赋值,这样它才会在内存中有地址;
        swap(ref i,ref j);
        console.WriteLine("i="+i.Tostring,"j="+j.Tostring);//i=3,j=2此时只是将i.j的地址传递给swap方法,交换的是他们的地址,所有数值做相应的改变;
}

这次之所以成功是因为ref的贡献。参数按引用类型传递,则i和m,j和n共享一块内存空间。在swap方法内部对m,n的值进行了修改,即相当于对i和j的值进行了修改,并且当swap方法内部对m,n的值进行了修改,即相当于对i和j进行了修改,并且当swap方法执行完毕时,该变化仍能维持,即顺利地完成了数值的交换。

如果参数类型是数组,则不需要加ref,就可以实现交换,因为数组本来就是引用类型;

out让函数可以输出多个值

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

2.static修饰符

3.访问修饰符

 

时间: 2024-11-11 23:19:27

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

@修饰符 二

修饰符基础——闭包 什么是闭包呢?标准的概念大家可以看wikipedia上的解释点击打开链接   举个例子: [python] view plain copy def do_add(base): def add(increase): return base + increase return add do_add函数里嵌套了一个内层函数add,这个内层函数就是一个闭包,其实可以也不用管这个“闭包”的概念,先来看下这种模式解决些什么问题. 调 用do_add函数:a = do_add(23),由于

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

访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protected at Class Level 在创建类时,我们需要考虑类的作用域范围,如谁可访问该类,谁可访问该类成员变量,谁可访问该类成员函数. 换而言之,我们需要约束类成员的访问范围.一个简单的规则,类成员函数.类成员变量之间可以自由 访问不受约束,这里主要说的是外部的访问约束.在创建class的时候,

深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Inter

深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants) 访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protected at Class Level 在创建类时,我们需要考虑类的作用域范围,如谁可访问该类,谁可访问该类成员变量,谁可访问该类成员函数. 换而言之,我们需

蓝鸥Unity开发基础二——课时3 访问修饰符

[蓝鸥Unity开发基础二]课时3 访问修饰符 一.访问修饰符 public --公共的,在哪里都能用 private  --私有的,只能够在当前机构体重使用,其他任何地方都不能 访问修饰符举例说明 using System; namespace Lesson_03{           struct Point2{        //public--公共的,在哪里都能用        public float x;        //private  --私有的,只能够在当前机构体重使用,其他

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

修饰符 修饰符即应用于类型或成员的关键字.修饰符可以指定方法的可见性,如public或private,还可以指定一项的本质,如刚发的vritual或abstract. 可见性的修饰符 修饰符 应用于 说明 public 所有类型或成员 任何代码均可以访问该项 protected 类型和内嵌类型的所有成员 只有派生的类型能访问该项 internal 所有类型或成员 只能包含它的程序集中访问该项 private 类型和内嵌类型的所有成员 只能在它所属的类型中访问该项 protected intern

Java反射(二):检测类的修饰符和类型

一个类可被若干个能影响其运行时行为的修饰符声明: 访问修饰符:public,protected,private 需要重载的修饰符:abstract 限制为只有一个实例的:static 阻止值修改:final 强制严格浮点行为:strictfp 注解 不是所有的修饰符能用在所有的类上.比如final不能修饰接口,枚举不能是abstract.java.lang.reflect.Modifier包含了所有可能修饰符的声明,它也包含用来编码由Class.getModifiers()返回的修饰符集合的方法

C# this用法系列(二) 通过this修饰符为原始类型扩展方法

定义一个静态类,类中定义静态方法,方法中参数类型前边加上this修饰符,即可实现对参数类型的方法扩展 示例如namespace Demo{ // 这里的类必须为静态类 public static class Json { // 方法为静态方法 // this修饰符后边是string类型,即为string类型扩展出了ToJson方法 public static object ToJson(this string Json) { return Json == null ? null : JsonCo

二、Java面向对象(5)_static修饰符

2018-04-29 树欲静而风不止 static修饰符 static修饰符表示静态的,该修饰符可以修饰字段.方法.内部类.使用该关键字修饰的内容,在面向对象中static修饰的内容是隶属于类,而不是直接隶属于对象的,所以static修饰的成员变量一般称作类成员变量,而static修饰的方法一般称作类方法. static修饰符的特点: 1)static修饰的成员(字段/方法),随着所在类的加载而加载. 当JVM把字节码加载进JVM的时候,static修饰的成员已经在内存中存在了. 2)优先于对象

二、Java面向对象(7)_封装思想——访问修饰符

2018-04-30 访问修饰符 <访问权限范围越小,安全性越高> public:表示全局的,可以在当前项目中任何地方访问 如果几个相互访问的public类分布在不用的包中,则需要导入相应public类所在的包.由于类的继承性,类所有的公有方法和变量都能被其子类继承. Java程序的main() 方法必须设置成公有的,否则,Java解释器将不能运行该类. protected:能被同一个包中的任何其他类访问,也能够被不同包中的子类访问. (protected访问修饰符不能修饰类和接口,方法和成员