1,堆栈:只能分配固定大小的数据类型。效率高

2,托管堆:运用垃圾回收器来管理内存,托管堆维护着一个指针,指向下一个要分配的地址。在托管堆中创建对象时,从基址开始分配内存,此后每分配一个对象,垃圾回收器就紧接着上一个对象的地址为对象分配空间。对于需要释放的内存,垃圾回收器自己释放。所以效率底。

3,非托管堆:没有垃圾回收机制,只可用指针访问。

4,值类型:存放在堆栈中。(简单类型,枚举,结构)

5,引用类型:在堆栈中存放引用类型的地址,在托管堆中存放数据。(类,数组,接口,委托)

6,装箱:

 

int i=10;
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);


 


 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);