none
xmldocument的问题 RRS feed

  • 问题

  • 看到如下代码
    private static XmlAttribute CreateNodeAttribute(XmlDocument doc, String name, String value)
                {
                    XmlAttribute attribute = doc.CreateAttribute(name, null);
                    attribute.Value = value;
                    return attribute;
                }
    我想问的是,这里的doc是怎么传递?按值还是按引用?另外,我再msdn中,怎么来查找这个类是按照值传递还是按引用传递?

    2009年9月10日 8:40

答案

  • 你好 doc是按引用传递的

    所有类都是按引用传递的
    对于值类型 如结构、枚举等 他们最终都是继承自ValueType而ValueType继承自Object
    值类型按照值传递,如果想按照引用的方式可以 在参数前面添加 out或者ref关键字

    class RefExample
    {
        static void Method(ref int i)
        {
            i = 44;
        }
        static void Main()
        {
            int val = 0;
            Method(ref val);
            // val is now 44
        }


    附:数据类型分隔为值类型和引用类型。值类型要么是堆栈分配的,要么是在结构中以内联方式分配的。引用类型是堆分配的。引用类型和值类型都是从最终的基类 Object 派生出来的。当值类型需要充当对象时,就在堆上分配一个包装(该包装能使值类型看上去像引用对象一样),并且将该值类型的值复制给它。该包装被加上标记,以便系统知道它包含一个值类型。这个进程称为装箱,其反向进程称为取消装箱。装箱和取消装箱能够使任何类型像对象一样进行处理。
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    • 已标记为答案 fangzhijie 2009年9月10日 9:05
    2009年9月10日 8:55
    版主
  • 这里的doc是怎么传递?

    XmlDocument d = new XmlDocument();
    d.LoadXml("<root/>");
    XmlAttribute   attr = CreateNodeAttribute(d,"name","test");

    类(class )类型属于引用类型

    值类型和引用类型的讲解

    http://msdn.microsoft.com/zh-cn/library/3ewxz6et.aspx
    http://msdn.microsoft.com/zh-cn/library/t63sy5hs.aspx

    【孟子E章】
    • 已标记为答案 fangzhijie 2009年9月10日 9:05
    2009年9月10日 8:59
    版主

全部回复

  • 你好 doc是按引用传递的

    所有类都是按引用传递的
    对于值类型 如结构、枚举等 他们最终都是继承自ValueType而ValueType继承自Object
    值类型按照值传递,如果想按照引用的方式可以 在参数前面添加 out或者ref关键字

    class RefExample
    {
        static void Method(ref int i)
        {
            i = 44;
        }
        static void Main()
        {
            int val = 0;
            Method(ref val);
            // val is now 44
        }


    附:数据类型分隔为值类型和引用类型。值类型要么是堆栈分配的,要么是在结构中以内联方式分配的。引用类型是堆分配的。引用类型和值类型都是从最终的基类 Object 派生出来的。当值类型需要充当对象时,就在堆上分配一个包装(该包装能使值类型看上去像引用对象一样),并且将该值类型的值复制给它。该包装被加上标记,以便系统知道它包含一个值类型。这个进程称为装箱,其反向进程称为取消装箱。装箱和取消装箱能够使任何类型像对象一样进行处理。
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    • 已标记为答案 fangzhijie 2009年9月10日 9:05
    2009年9月10日 8:55
    版主
  • 这里的doc是怎么传递?

    XmlDocument d = new XmlDocument();
    d.LoadXml("<root/>");
    XmlAttribute   attr = CreateNodeAttribute(d,"name","test");

    类(class )类型属于引用类型

    值类型和引用类型的讲解

    http://msdn.microsoft.com/zh-cn/library/3ewxz6et.aspx
    http://msdn.microsoft.com/zh-cn/library/t63sy5hs.aspx

    【孟子E章】
    • 已标记为答案 fangzhijie 2009年9月10日 9:05
    2009年9月10日 8:59
    版主
  • 谢谢!

    2009年9月10日 9:05
  • 谢谢啊!
    2009年9月10日 9:05