概念不清楚,为什么在类中可以实例化对象呢?
------------------------------------------------
我理解,类只是一个模板呀,不会分配内存空间,
但是为什么在类中,也可以进行对象的实例化操作呢?
对象的实例化操作是具体的呀,会分配内存呀,
这与类是一个模板的宗旨相违背呀?比如下面的代码,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();
}
}
}
------------------------------------------------
我理解,类只是一个模板呀,不会分配内存空间,
但是为什么在类中,也可以进行对象的实例化操作呢?
对象的实例化操作是具体的呀,会分配内存呀,
这与类是一个模板的宗旨相违背呀?比如下面的代码,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();
}
}
}
解决方案 »
- C++怎么样调用C#写的DLL
- C#的ProgressBar能改装成显示电池电量吗
- |ZYCWPF| WPF中如何将ListView绑定数组呢?谢谢
- 想要一份Socket网络编程的教程
- winform 问题
- 关于treeview的问题(c#/winform)
- 卸载怎么不好使msiexec.exe快捷方式的arguments属性设成/X {2853B140-7815-4771-9064-A6145ADF0973}也不好使
- C#中.XSD是什么文件
- 怎样在多个Web projects中共用一个Session中的值?
- 请问在c#里能够编写一个像tcpdump/windump的程序吗?
- System.Data.DBConcurrencyException与System.Data.ConstrainException
- 如何用数据适配器操作C#触发器
{
public Arm LeftArm,RightArm;
public Human()
{
LeftArm = new Arm();
RightArm = new Arm();
}
}
明白了么,难道你认为只要知道人有胳膊就可以了,不用实实在在的创造一个么?
分配哪些空间呢?我一直认为,是在 new class()是才分配空间的呀?
你这个类的所谓模板,其实就是一个声明 ,声明的时候只有一个类的框子,没有存储空间,只有对象占有存储空间,类不占有存储空间
这个你可以理解吧 声明定义同存储无关,不要去套在一起
和存储有关的只是形成对象的时候,也就是new的时候
{
string name; //只不过是声明 不要想着存储空间
int age; //同上 public employee emp = new employee("张三",55); //②在company实例化以后,执行到这才会分配employee实例emp的空间
}public class Program
{
static void main()
{
company c = new company();//①这个时候才开始c的分配空间
}
}注意顺序 应该要站在程序执行的角度上来看问题
{
static string foo = "很好很强大!";
static void Main(string[] args)
{
Console.WriteLine("类不占有存储空间?");
Console.WriteLine("那这段代码可以不用内存咯?太神奇了");
Console.WriteLine(foo);
}
}
{
public InClass in=new InClass();
}一开始运行的时候是不会分配空间
但当
OutClass out=new OutClass()
那么程序就开始分配空间了
也许是out分配后再分配in
也许是in分配后再分配out可以看看<你必须知道的.net> 应该有将这里面的东西高深点的可以看看反汇编 看看内存的分配过程
不过这个太高深了