c#基础 之对象和类型
2013-09-23 17:27
148 查看
1、类和结构
结构与类的区别是它们在内存中的存储方式(类是存储在堆(heap)上的引用类型,而结构是存储在堆栈(stack)上的值类型)、访问方式和一些特征(如结构不支持继承)。较小的数据类型使用结构可提高性能。但在语法上,结构与类非常相似,主要的区别是使用关键字struct代替class来声明结构。
一、预备知识—程序的内存分配
一个由C/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)—
由编译器自动分配释放,存放函数的参数值,局部变量的值等。其
操作方式类似于数据结构中的栈。
2、堆区(heap)
— 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回
收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的
全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另
一块区域。 -
程序结束后由系统释放。
4、文字常量区 —常量字符串就是放在这里的。程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。
2、数组或其他引用类型(如类)传递给方法,方法就会使用该引用改变这个数组中的值,而新值会反射到原来的数组对象上
结果如下:
3、ref参数
方法对变量所作的任何改变都会影响原来对象的值:
在调用该方法时,ref
关键字的变量需要赋值(初始化)还需要添加ref关键字:
4、out关键字
参数只需声明,不用初始化。方法体内,必须对out
参数赋值。否则报错。
5、方法的重载
方法名相同、但参数的个数和类型不同。因为C#不直接支持可选参数,所以需要使用方法重载来达到此目的
#warning
6、属性
结构与类的区别是它们在内存中的存储方式(类是存储在堆(heap)上的引用类型,而结构是存储在堆栈(stack)上的值类型)、访问方式和一些特征(如结构不支持继承)。较小的数据类型使用结构可提高性能。但在语法上,结构与类非常相似,主要的区别是使用关键字struct代替class来声明结构。
一、预备知识—程序的内存分配
一个由C/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)—
由编译器自动分配释放,存放函数的参数值,局部变量的值等。其
操作方式类似于数据结构中的栈。
2、堆区(heap)
— 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回
收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的
全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另
一块区域。 -
程序结束后由系统释放。
4、文字常量区 —常量字符串就是放在这里的。程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。
2、数组或其他引用类型(如类)传递给方法,方法就会使用该引用改变这个数组中的值,而新值会反射到原来的数组对象上
using System; namespace Wrox.ProCSharp. ParameterTestSample { class ParameterTest { static void SomeFunction(int[] ints, int i) { ints[0] = 100; i = 100; } public static int Main() { int i = 0; int[] ints = { 0, 1, 2, 4, 8 }; // Display the original values Console.WriteLine("i = " + i); Console.WriteLine("ints[0] = " + ints[0]); Console.WriteLine("Calling SomeFunction..."); // After this method returns, ints will be changed, // but i will not SomeFunction(ints, i); Console.WriteLine("i = " + i); Console.WriteLine("ints[0] = " + ints[0]); return 0; } } } |
csc ParameterTest.cs Microsoft (R) Visual C# Compiler version 9.00.20404 for Microsoft (R) .NET Framework version 3.5 Copyright (C) Microsoft Corporation. All rights reserved. ParameterTest.exe i = 0 ints[0] = 0 Calling SomeFunction... i = 0 ints[0] = 100 |
3、ref参数
方法对变量所作的任何改变都会影响原来对象的值:
static void SomeFunction(int[] ints, ref int i) { ints[0] = 100; i = 100; //the change to i will persist after SomeFunction() exits } |
关键字的变量需要赋值(初始化)还需要添加ref关键字:
Int i=1; SomeFunction(ints, ref i); |
static void SomeFunction(out int i) { i = 100; } public static int Main() { int i; // note how i is declared but not initialized SomeFunction(out i); Console.WriteLine(i); return 0; } |
参数赋值。否则报错。
5、方法的重载
方法名相同、但参数的个数和类型不同。因为C#不直接支持可选参数,所以需要使用方法重载来达到此目的
#warning
6、属性
public string Name { get { return _name; } set { _name = value; } } |
相关文章推荐
- C#类型基础----对象判等
- C#基础学习第二篇:对象和类型
- C# 类型基础(对象深度/浅度复制)
- [C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型
- [C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型
- [C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型 推荐
- C#基础(二)对象和类型
- C#/.net学习-----C#基础知识-对象和类型
- [CLR via C#]4. 类型基础及类型、对象、栈和堆运行时的相互联系
- Why Java Sucks and C# Rocks(2):基础类型与对象
- Why Java Sucks and C# Rocks(2):基础类型与对象
- [C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型
- 黑马程序员_学习日记2_有关C#基础知识总结归纳之对象和类型
- C#类型基础----对象复制
- [CLR via C#]4. 类型基础及类型、对象、栈和堆运行时的相互联系
- [No0000B9]C# 类型基础 值类型和引用类型 及其 对象复制 浅度复制vs深度复制 深入研究2
- C# VS 面向对象基础(一)
- C#之WinForm基础 设置保存文件对话框的文件类型
- C#基础知识-对象初始化顺序
- [C#] 不同类型的对象之间快速拷贝(比反射快十倍)