首页 新闻 会员 周边

C# 参数传递

0
悬赏园豆:10 [已解决问题] 解决于 2012-12-04 13:52
internal class Program
    {
        private static void Main(string[] args)
        {
            A a = new A { Name = "123", Length = 123 };
            Console.WriteLine(a.Id);
            DoTest(a);
            Console.WriteLine(a.Id);
            Console.ReadLine();
        }
 
        public static void DoTest(A a)
        {
            Console.WriteLine(a.Id);
            a.Id = Guid.NewGuid();
            Console.WriteLine(a.Id);
        }
    }
 
    internal class A
    {
        public A()
        {
            Id = Guid.NewGuid();
        }
 
        public Guid Id { getset; }
 
        public string Name { getset; }
 
        public int Length { getset; }
    }
上面的代码在执行 DoTest的时候,传递进来的a是传递的指针吗?还是传递a对象的副本?
执行效果与下面代码完全相同:
internal class Program
    {
        private static void Main(string[] args)
        {
            A a = new A { Name = "123", Length = 123 };
            Console.WriteLine(a.Id);
            DoTest(ref a);
            Console.WriteLine(a.Id);
            Console.ReadLine();
        }

        public static void DoTest(ref A a)
        {
            Console.WriteLine(a.Id);
            a.Id = Guid.NewGuid();
            Console.WriteLine(a.Id);
        }
    }

    internal class A
    {
        public A()
        {
            Id = Guid.NewGuid();
        }

        public Guid Id { get; set; }

        public string Name { get; set; }

        public int Length { get; set; }
    }
c#
RyanCheng的主页 RyanCheng | 菜鸟二级 | 园豆:474
提问于:2012-11-29 09:39
< >
分享
最佳答案
0
上面的代码在执行 DoTest的时候,传递进来的a是传递的指针吗?还是传递a对象的副本?

c#中参数的传递都是值传递,如果你传递的是值类型,就是传递的值的副本,如果你传递的是引用类型,那传递的是这个对象的内存地址
收获园豆:10
chenping2008 | 大侠五级 |园豆:9836 | 2012-11-29 09:58

如果如你所说,那么public static void DoTest(ref A a)传递过来的又是什么呢?

RyanCheng | 园豆:474 (菜鸟二级) | 2012-11-29 10:29

@RyanCheng: 那就是a本身,不是a指向的地址

chenping2008 | 园豆:9836 (大侠五级) | 2012-11-29 10:48

@chenping2008 你的意思对引用类型作为参数传递时,如果加上ref 参数,那实际传递的是对象本身?我想.net应该不会把对象(对象可能会足够大)拿来直接操作吧.

RyanCheng | 园豆:474 (菜鸟二级) | 2012-11-29 18:59
其他回答(2)
0

引用

慧☆星 | 园豆:5640 (大侠五级) | 2012-11-29 10:16
0

因为A是一个实体类.是一个引用类型,如果没有特殊定意的话.自定意的类都是引用类型的,像int,string,double...等等,是值类型的.

如果你搞不明白,建议你去看一下引用类型与值类型方面的资料.

只会造轮子 | 园豆:2274 (老鸟四级) | 2012-11-29 14:32

@发粪图墙你就瞎捣蛋,问你这个了吗

支持(0) 反对(0) RyanCheng | 园豆:474 (菜鸟二级) | 2012-11-29 18:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册