我发现不一定class对象的reference就一定放在堆栈上,而对象本身放在堆上,因为如果ClassA这样定义:
class ClassA {private ClassB abc = new ClassB();}
在main(){ClassA ab1 = new ClassA();}时,ab1对象放在堆上,ab1内,abc对象的reference也应该在堆上吧。那么什么时候才能肯定一个变量是放在堆栈(stack)而不是堆(heap)上呢?我编了个小例子:
class Class1
{
[STAThread]
static void Main(string[] args)
{
testClassB abc = new testClassB();
abc.doTest();
}
} public class testClass
{
public testClass():this(1){}
public testClass(int a):this(){}
} public class testClassB
{
public void doTest()
{
testClass ak1 = new testClass();
}
}程序很快就报StackOverflowException,testClass的构造器有问题,我想既然testClass是在堆上运行,那至少要把堆的内存(所有内存?)用完再报错吧。
class ClassA {private ClassB abc = new ClassB();}
在main(){ClassA ab1 = new ClassA();}时,ab1对象放在堆上,ab1内,abc对象的reference也应该在堆上吧。那么什么时候才能肯定一个变量是放在堆栈(stack)而不是堆(heap)上呢?我编了个小例子:
class Class1
{
[STAThread]
static void Main(string[] args)
{
testClassB abc = new testClassB();
abc.doTest();
}
} public class testClass
{
public testClass():this(1){}
public testClass(int a):this(){}
} public class testClassB
{
public void doTest()
{
testClass ak1 = new testClass();
}
}程序很快就报StackOverflowException,testClass的构造器有问题,我想既然testClass是在堆上运行,那至少要把堆的内存(所有内存?)用完再报错吧。
解决方案 »
- 单词匹配算法
- c#中tcp应用编程,连接超时,如时设置超过一定时间就抛出异常
- 如何通过算法区分节假日
- ……C#写的windows服务程序,为什么监听不到TCP连接?
- C# 获取触发器信息
- 我在C#WinForm中,想去除textbox自带的双击选中字符串的功能,怎么做呢?
- 求助一个Visual Studio 2005(Winform)ComboBox的问题
- 100分求助:如何读取出本地cookies文件中的expires
- 动态创建菜单,如何将菜单事件通过XML配置文件实现??
- c#一个简单却实现不了的问题
- 用Udp做了个p2p聊天,可就是不好使,怎么搞的(付程序,给看看!)
- Drawing在System”中不存在
public class Test
{
public int aa = 23;
public StructType ab;
}
当在另一个类里实例化Test时,那aa和ab应该都在堆上吧。