您的位置:首页 > 编程语言 > C#

C#中的ref,out,值类型,引用类型的笔记

2015-10-26 00:12 411 查看
因为基础不好,所以重新读C#高级编程这本书,顺道做下笔记

一:基本类型,内置的CTS值类型表示基本类型,分为值类型和引用类型

值类型:内置的CTS值类型表示基本类型,包括8个整型,浮点类型,decimal类型,bool类型,字符类型

引用类型:object类型,string类型

注意:

1:值类型直接存储其值,存储在堆栈中

2:引用类型存储对值的引用,存储在托管堆上

二:定义变量

如定义一个int i;

在源代码中,C#用关键字int来表示Int32,所以在C#中定义一个int类型数据时,声明的实际是.NET结构System.Int32的一个实例,所以我们可以使用string i =i.tostring();

注意:C#规定变量必须初始化

三:传递参数

正如上面所说,传递的参数分为值类型和引用类型,如上面所说,那么传递的参数也必须初始化,这一点很重要。

3.1:ref关键字

1:ref 强迫值类型转化为引用类型

初始代码:

class Program
{
static void Main(string[] args)
{
method me = new method();
int i=100;
me.method1(i);         //参数i属于值传递
Console.WriteLine(i);  //所以i输出100
Console.ReadKey();
}

}
class method
{
public void method1( int op1)
{
op1 = 10;
}
}


当我加了给i加上ref

class Program
{
static void Main(string[] args)
{
method me = new method();
int i=100;
me.method1(ref i);    //参数i强迫变成引用传递
Console.WriteLine(i);  //所以i输出10
Console.ReadKey();
}

}
class method
{
public void method1(ref int op1)
{
op1 = 10;
}
}


3.2 out 关键字

传递参数的时候必须初始化,而out关键字可以使参数不用初始化



如图所示,

我不初始化i,不加out关键字的时候提示使用了未赋值的局部变量i

我不初始化,并且加了out关键字后就不会报错了



这时候输出10

因为这种方式还是值传递,不会改变i的值

而这次令我困惑的地方是

class Program
{
static void Main(string[] args)
{
method me = new method();
me.method1(100);
Console.ReadKey();
}

}
class method
{
public void method1( int op1)
{
Console.WriteLine(op1);
}
}


如上所示,我迷茫的是根据必须初始化,在method中我没有初始化,为什么不报错,其实是我跳坑里了,这个也初始化了,在me.method1(100);中给op1初始为了100。

在提一个可变参数:

class Program
{
static void Main(string[] args)
{
method me = new method();
me.method1(100);//参数i属于值传递
Console.ReadKey();
}

}
class method
{
public void method1( int op1,int op2=100)
{
Console.WriteLine(op1+op2);
}
}


op2为可变参数,必须写到参数最后,必须赋值。

不得不说基础不好是硬伤啊,但我相信每天学一点,总会达到精通的那一天。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: