我自己编了个例子,关于struct:
public struct structTest
{
    public object abc;
    public structTest(int a)
    { abc = new object();}
}
在别的类中使用:
structTest kk1 = new structTest(3);
kk1.abc = "a";
structTest kk2 = kk1;
kk1.abc = "b";kk2.abc我测出来是"a"。是不是kk1没有简单地赋abc的reference给kk2?我想问在这个abc的reference和reference指的object都放在stack内存里,还是object在heap内存上。是不是只要是struct类型,不管里面放的是什么,struct里的所有东西都在stack内存里。
关于string:
string是reference类型,在class中它指的内容是在heap上吗,如string aa = "wer";"wer"是不是在heap上,string在struct中呢?。关于static:
class A
{
    private static string kk1 = "a";
    public static string kk2 = "b";
}
在别的类内使用:
private A test = new A();
private someFunc()
{
    test = null;
}
当test为null时,是不是static string kk1 和static string kk2的值还在内存里,那这样某些类里有static 变量,这些类的对象用完后,static变量岂不还残留着?感谢大家帮我解感:)

解决方案 »

  1.   

    // structTest kk2 = kk1;
    这个地方复制了内存,而不是复制引用,所以完全独立
    struct总是在线程堆栈中// 如string aa = "wer";"wer"是不是在heap上,string在struct中呢?
    string是class不是struct,总是在堆上// 这些类的对象用完后,static变量岂不还残留着
    当然,静态变量类似于全局变量,和OO基本没有关系
      

  2.   

    放在struct里的string或object是以什么形式存放的,reference地址和被引用的内容都在线程堆栈里吗?Sunmast说:
    “string是class不是struct,总是在堆上”,那在struct中的string也在堆(heap)上?
      

  3.   

    // 放在struct里的string或object是以什么形式存放的
    struct里只有一个引用,而数据还在堆上// 那在struct中的string也在堆(heap)上?
    是的
      

  4.   

    没有确切得证据,我得理解是struct中存放得是string对象在堆(heap) 上的地址,而不是string本身。看了 Sunmast的回复吓了一跳,我竟然忘了string是引用类型了,^_^,看看要学而实习之,才能不亦乐乎。
      

  5.   

    structTest kk1 = new structTest(3);
    kk1.abc = "a";
    structTest kk2 = kk1;   //拷贝, kk2.abc 和kk1.abc指向同一个对象,两个指针指向同一块内存
    kk1.abc = "b";   //“b”是另一个对象(在堆上),把这个对象的地址赋给kk1.abc
    这时kk1.abc 和 kk2.abc 指向不同的对象“b” “a”
      

  6.   

    基本功是很重要的:
    c#中的VALUE类型有以下几种:
     简单类型 (如int, float, char...);
     struct, enum
    Referece 类型有:delegate[代理],class, array, interface。
    至于在一个struct中定义string, 也就是在一个值类型中存储了相应引用类型的reference.
    也就是在堆栈中存贮了指向heap中某块内存的地址。
    希望对你有所帮助,另外如果是刚开始学的话,你可以看这本书《C#完全手册》
      

  7.   

    应该是primitive type,基元类型,直接可以被机器处理的类型
    包括Boolean、Byte、SByte、Int16、UInt16、Int32、UInt32、Int64、UInt64、Char、Double 和 Single
    注意没有Decimal好像不用"简单类型"这个词
    别的都对
      

  8.   

    乘大家都在,接着再问些关于Struct的问题:
    public struct TestStruct
    {
    public int TheKK = 232;
    }
    struct规定不能这样初始化,而且它的默认constructor要给每个field赋null或0。初始化fields只能放在带参数的constructor里,有人知道为什么要有这样的规定吗?
    还有如果我在某个类中private someStructType kk = new someStructType(...);如果kk很大,有什么办法让kk清空吗?(也许不行,因为是Value type,reference可以= null)
    谢谢!