1,堆栈:只能分配固定大小的数据类型。效率高
2,托管堆:运用垃圾回收器来管理内存,托管堆维护着一个指针,指向下一个要分配的地址。在托管堆中创建对象时,从基址开始分配内存,此后每分配一个对象,垃圾回收器就紧接着上一个对象的地址为对象分配空间。对于需要释放的内存,垃圾回收器自己释放。所以效率底。
3,非托管堆:没有垃圾回收机制,只可用指针访问。
4,值类型:存放在堆栈中。(简单类型,枚举,结构)
5,引用类型:在堆栈中存放引用类型的地址,在托管堆中存放数据。(类,数组,接口,委托)
6,装箱:
int i=10;
object o=i;
object o=i;
a,在托管堆中为对象o分配内存空间,
b,为对象o赋值
c,将o的地址压入堆栈,此时o是一个对象的引用。
7,拆箱:
a,首先检查对象是否是该值类型装箱所得。
b,将值从事例中复制出来,赋值给变量。
//
int i=10;
object o=i;
console.writeline("{0},{1}",i,o);
//拆箱
int a=(int)o;
console.write("{0},{1}",a,i);
int i=10;
object o=i;
console.writeline("{0},{1}",i,o);
//拆箱
int a=(int)o;
console.write("{0},{1}",a,i);
8,writeline(),write().
writeline() 是在输出的最后输出一个换行符。
write()在最后不输出换行符,
a,格式控制:字符串格式{index,w}index为参数索引。w为指定打印的宽度。w为正时,打印文本右对齐;w为负时,打印文本左对齐。
代码
int i = 123;
double d = 234.2;
bool isempty = false;
string str = "you are right";
//Console.Write("i={0};d={1},isempty={2},str={3}\n", i, d, isempty, str);
Console.WriteLine("i={0};d={1},isempty={2},str={3}", i, d, isempty, str);
Console.Write("i={0};d={1},isempty={2},str={3}\n", i, d, isempty, str);
Console.Write("i=|{0,5}|\n", i);
Console.Write("i=|{0,-5}|\n", i);
double d = 234.2;
bool isempty = false;
string str = "you are right";
//Console.Write("i={0};d={1},isempty={2},str={3}\n", i, d, isempty, str);
Console.WriteLine("i={0};d={1},isempty={2},str={3}", i, d, isempty, str);
Console.Write("i={0};d={1},isempty={2},str={3}\n", i, d, isempty, str);
Console.Write("i=|{0,5}|\n", i);
Console.Write("i=|{0,-5}|\n", i);