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 强迫值类型转化为引用类型
初始代码:
当我加了给i加上ref
3.2 out 关键字
传递参数的时候必须初始化,而out关键字可以使参数不用初始化
如图所示,
我不初始化i,不加out关键字的时候提示使用了未赋值的局部变量i
我不初始化,并且加了out关键字后就不会报错了
这时候输出10
因为这种方式还是值传递,不会改变i的值
而这次令我困惑的地方是
如上所示,我迷茫的是根据必须初始化,在method中我没有初始化,为什么不报错,其实是我跳坑里了,这个也初始化了,在me.method1(100);中给op1初始为了100。
在提一个可变参数:
op2为可变参数,必须写到参数最后,必须赋值。
不得不说基础不好是硬伤啊,但我相信每天学一点,总会达到精通的那一天。
一:基本类型,内置的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为可变参数,必须写到参数最后,必须赋值。
不得不说基础不好是硬伤啊,但我相信每天学一点,总会达到精通的那一天。
相关文章推荐
- C#正则表达式之Regex类用法详解
- C#正则表达式判断输入日期格式是否正确
- C#中Monitor和Lock以及区别
- 疯狂C#~伴随着我的库存管理¥
- C# 操作网页标签
- 书中的银行,我们一起奋斗的C#,只因乐在其中~
- 浅谈你感兴趣的 C# GC 机制底层
- C#语言特性
- c# ppt转pdf
- C#程序实现闰年的判断
- C#之第五单元的项目打印购物单
- C# 程序简单实现加密解密程序代码
- C#测试程序运行时间
- 第1篇 C#语言基本语句和语法
- Dotnetbar Winform 属性备忘
- C# 如何关联键盘按钮 (KeyChar/KeyCode值 KeyPress/KeyDown事件 区别)
- C#调用win32 api程序实例
- C# Properties.Settings.Default
- (原创)c#学习笔记05--变量的更多内容01--类型转换03--使用Convert命令进行显式转焕
- (原创)c#学习笔记05--变量的更多内容01--类型转换02--显示转换