C#学习笔记之——数据类型,引用参数,输出参数,数组参数,命名参数,可选参数

一、值类型、引用类型和指针类型

C#有三种类型:引用类型、值类型和指针类型。

 

1、值类型:在栈中分配空间,由系统自动分配

  如:枚举类型、j结构类型(数值类型(decimal、整数类型(sbyte、byte、char、short、short、int、uint、long、long)、浮点类型(float、double))、布尔类型、自定义结构类型)

PS:double相比,decimal 类型具有更高的精度和更小的范围

 

2、引用类型:在堆中分配空间,由程序员用“new”来分配空间

  如:Object、string、类(class)、接口(interface)、委托(delegate)、数组

 

3、指针类型同C和C++一样的使用,但还有一些特殊的地方,此处不讨论。

 

值类型在做赋值操作的时候,值类型变量相互赋值之后,两变量做任何操作都互不受影响,因为他们储存在不同的空间。

引用类型相互赋值之后,因为他们共用一个空间,互相影响,一个值改变,另一个值也相应改变。

 

二、引用参数

为了让值类型的参数达到引用类型参数的效果,ref。

ref修饰的变量在传递参数前一定要有初始值

三、输出参数

如果想要返回一个或多个的,out。

out修饰的变量在传递之前,可以没有初始值。

四、数组参数

如果形参列表中包含数组型参数,那么它必须位于参数列表中位于最后一位,而且必须是一维数组类型。另外,数组型参数不可能将params修饰符与ref和out修饰符组合起来使用。

public int Avg (params int[] array) {
    int sum = 0;
    foreach (int a in array) 
    {
        sum += a;
    }
    return sum;
}
 

hero.Avg (1, 2, 3, 4, 5, 6, 7);
hero.Avg (new int[]{ 1, 2, 3, 4, 5, 6, 7 });   

 

五、命名参数

class MyClass
{
    public int C(int a, int b, int c)//参数声明没有区别
    {
        return (a + b) * c;
    }
    static void Main(string[] args)
    {
        MyClass mc = new MyClass();
        int result = mc.C(c: 2, a: 4, b: 3);//参数的名字和值,顺序可以不一样
        Console.WriteLine("{0}", result);
    }
}

 

六、可选参数

class MyClass
{
    public int C(int a, int b = 5)//默认b为5,可选参数
    {
        return a + b;
    }
    static void Main(string[] args)
    {
        MyClass mc = new MyClass();
        int a1 = mc.C(5, 6);//使用显式值
        int a2 = mc.C(5);//b使用默认值
        Console.WriteLine("{0},{1}", a1,a2);
    }
}

 

最后结果:11,10

posted @ 2017-12-05 17:40  养鼠的猫  阅读(145)  评论(0编辑  收藏  举报