zoukankan      html  css  js  c++  java
  • 属性和方法调用不允许作为ref或out参数值使用

    C#允许属性像字段那样使用,只是不允许将它们作为ref或out参数值来传递。ref和out参数值在内部实现时,需要将内存地址传给目标方法。但是,由于属性可能是没有支持字段的虚字段,也有可能是只读/只写的,因此不可能传递其基础存储的地址。所以,你不能将属性作为ref或out参数值来传递。同样的道理也适用于方法调用。如果需要将一个属性或者方法调用作为ref或out参数值来传递,首先必须将值复制到一个变量中,然后传递该变量。方法调用结束之后,再将变量的值赋回属性。

      public class Classmates

            {
                public Person[] Students { getset; }
                public Person Master { getset; }
                public int Age { getset; }
            }


            static void Main()
            {
                Classmates class1 = new Classmates();
                Person[] Students = new Person[] { new Person() { Name = "Jim" }, new Person() { Name = "Tom" } };
                Person master = new Person() { Name = "JuanJuan" };
                class1.Students = Students;
                class1.Master = master;
                class1.Age = 10;
                ChangeName(ref class1.Students[0]);
                //ChangeAge(ref class1.Age);
                
    //ChangeMasterName(ref class1.Master);

                foreach (var student in Students)
                {
                    Console.WriteLine(student.Name);
                }
                System.Console.ReadKey();
            }

            static void ChangeName(ref Person p)
            {
                p = new Person();
                p.Name = "New Guy";
            }

            static void ChangeMasterName(ref Person p)
            {
                p = new Person();
                p.Name = "New Master";
            }
            static void ChangeAge(ref int Age)
            {
                Age = 10;
            }

  • 相关阅读:
    每日日报16
    每日日报15
    每日日报14
    每日日报13
    每日日报12
    每日日报11
    每日日报10
    每日作业报告
    每日作业报告
    每日作业报告
  • 原文地址:https://www.cnblogs.com/shineqiujuan/p/2519576.html
Copyright © 2011-2022 走看看