概念不清楚,为什么在类中可以实例化对象呢?
------------------------------------------------
我理解,类只是一个模板呀,不会分配内存空间,
但是为什么在类中,也可以进行对象的实例化操作呢?
对象的实例化操作是具体的呀,会分配内存呀,
这与类是一个模板的宗旨相违背呀?比如下面的代码,using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace d0924_2
{
    class employee
    {
        public string name = "";
        public int age = 0;        public employee(string na,int ag)
        {
            Console.WriteLine("employee构造   {0}",na);
            name = na;
            age = ag;
        }
    }    class company
    {
        public string companyname="";
        //public employee emp = new employee("张三",55);
        public employee emp;        public company (string c)
        {
            Console.WriteLine("company构造");
            companyname=c;
            emp=new employee("王五",66);
        }
    }    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("-----------------------------");
            company obj1 = new company("山东大学");
            Console.WriteLine("{0}    {1}    {2}",obj1.companyname,obj1.emp.name,obj1.emp.age);
            Console.ReadLine();
        }
    }
}

解决方案 »

  1.   

    public class Human
    {
        public Arm LeftArm,RightArm;
        public Human()
        {
            LeftArm = new Arm();
            RightArm = new Arm();
        }
    }
    明白了么,难道你认为只要知道人有胳膊就可以了,不用实实在在的创造一个么?
      

  2.   

    谢谢,原来我的理解是错的,类定义本身,也会分配内存空间吗?
    分配哪些空间呢?我一直认为,是在 new class()是才分配空间的呀?
      

  3.   

    楼主说的没错但是楼主所理解的角度错了  你不能顺着代码去理解   而是要站在代码被编译的角度去理解
    你这个类的所谓模板,其实就是一个声明 ,声明的时候只有一个类的框子,没有存储空间,只有对象占有存储空间,类不占有存储空间
    这个你可以理解吧  声明定义同存储无关,不要去套在一起
    和存储有关的只是形成对象的时候,也就是new的时候
      

  4.   

    public class company
    {
        string name; //只不过是声明 不要想着存储空间
        int age;   //同上    public employee emp = new employee("张三",55);  //②在company实例化以后,执行到这才会分配employee实例emp的空间
    }public class Program
    {
        static void main()
        {
            company c = new company();//①这个时候才开始c的分配空间
         }
    }注意顺序  应该要站在程序执行的角度上来看问题  
      

  5.   

        class Program
        {
            static string foo = "很好很强大!";
            static void Main(string[] args)
            {
                Console.WriteLine("类不占有存储空间?");
                Console.WriteLine("那这段代码可以不用内存咯?太神奇了");
                Console.WriteLine(foo);
            }
        }
      

  6.   

    其实像int,string 这些类型也可看作类的,既然它们能作为一个类的变量成员,为什么自己定义的类不行呢?本质上是一样的。类要实例化为对象才分配内存是对的,类的嵌套注意构造函数的执行顺序,当然是外层类实例化时才执行一系列的构造 函数,并不矛盾啊
      

  7.   

    代码本身当然会占用空间的,难道能无中生有吗?但只有new class()时才在堆栈中分配。
      

  8.   

    您举的例子是静态类呀,静态类是无须实例化的呀。肯定占内存了。我举的例子,不是静态类不过,我明白了,虽然类代码中有 new ,但是这个 new 只有 这个类被实例化时,才会执行。
      

  9.   

    public class OutClass
    {
       public InClass in=new InClass();
    }一开始运行的时候是不会分配空间
    但当
    OutClass out=new OutClass()
    那么程序就开始分配空间了
    也许是out分配后再分配in
    也许是in分配后再分配out可以看看<你必须知道的.net> 应该有将这里面的东西高深点的可以看看反汇编 看看内存的分配过程
    不过这个太高深了