C#--堆栈

C#中的堆栈

这里写图片描述

:是程序运行期间动态分配的内存空间,你可以根据程度的运行情况确定要分配的堆内存大小

:是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;局部值类型变量、值类型参数等都在栈内存中。

值类型\ 应用类型比较:

  1. 将一个值类型变量赋给另一个值类型变量时,将复制包含的值。引用类型变量的赋值只复制对对象的引用,而不复制对象本身。
  2. 值类型不可能派生出新的类型:所有的值类型均隐式派生自System.ValueYype。但与引用类型相同的是:结构也可以实现接口。
  3. 值类型不可能包含null值
  4. 每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。
  5. 值类型在栈上存的是值;应用类型在栈上存的是地址,堆上存值。

这里写图片描述

值和应用类型举例:

 class Program
    {
        static void Main(string[] args)
        {
            person p1 = new person();
            p1.Age = 20;
            p1.Gender = '男';


            person p2 = new person();
            p2 = p1;
            p2.Age = 100;
            p2.Gender = '女';

            Console.WriteLine(p1.Age);
            Console.WriteLine(p1.Gender);
            Console.WriteLine("=====================");
            Console.WriteLine(p2.Age);
            Console.WriteLine(p2.Gender);
            Console.ReadKey();

            // 类中默认的有一个无参的构造函数,当类中写一个有参数的构造函数,默认五参数构造函数被干掉了。
            //类中写构造函数参数列表中参数个数可以不确定。


            //结构
            //在结构中默认的也有一个无参数的构造函数
            //当在结构中写一个有参数的构造函数,默认无参数的构造函数还有,没被干掉。
            //在结构中写构造函数,要把所有字段都要完全赋值。

            // 类是引用类型,结构是值类型。
        }
    }

//下面的定义
  public struct  person  //如果是struct(结构)显示男的20,女100;如果是class(类)则都显示100
  {

            private string _name;
            public string name
            {
                get { return _name; }
                set { _name = value; }
            }

            private int  _age;
            public int Age
            {
                get { return _age; }
                set { _age = value; }

            }

            private char _gender;
            public char Gender
            {
                get { return _gender; }
                set { _gender =value ; }

            }

            public void show()
            {
                Console.WriteLine("{0}岁的{1}在大米时代是最厉害的{2}学生",_age,_name,_gender );

            }


  }

猜你喜欢

转载自blog.csdn.net/aimin_com/article/details/80546706