Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(196评价)
价格: 4039.00元
数组类型的属性
摸摸鱼发起了问答2017-08-26
4
回复
319
浏览

 

老师,您在丛林战争中Message类中这样写:

        private byte[] data = new byte[1024];
        public byte[] Data
        {
            get { return data; }
        }

使用Data封装了一下data数组,没有用set,竟然也可以在外部通过Data修改data

我怀疑是引用类型的原因,因此用string类型测试:

class A
{
    private string aaa = "abc";
    public string AAA
    {
        get { return aaa; }
    }
    public void Output()
    {
        Console.Write(aaa);
    }
}


    class Program
    {
        static void Main(string[] args)
        {

            A a = new A();
            a.AAA = "def";  // 提示只读不能修改
            a.Output();

            Console.ReadKey();
        }
    }     

直接提示不能修改,但是用自定义类型测试: 

class MyClass
{
    public int x = 1000;
}

class A
{
    private MyClass aaa = new MyClass();
    public MyClass AAA
    {
        get { return aaa; }
    }
    public void Output()
    {
        Console.Write(aaa.x);
    }
}

    class Program
    {
        static void Main(string[] args)
        {
            A a = new A();
            a.AAA.x = 2000;
            a.Output();

            Console.ReadKey();
        }
    }  

结果输出是2000,和数组一样可以修改,这是什么原因呢?

如果引用类型和数组都可以通过get属性就可以修改,那么引用类型和数组的属性不是没有意义了吗?

 

所有回复
  • siki 2017-08-26

    这不是可以修改

    数组还有下面的mycalss都是不能修改的

    你修改的是对象里面的内容,并不是修改的这个变量

    private byte[] data = new byte[1024];
            public byte[] Data
            {
                get { return data; }
            }

    这里的data是一个数组

    有两种修改方式

    1,xx.data = xxx; 不允许 因为 data是private的 没有set

    2,xx.data[1]=sss 允许,你修改的data里面的内容,并不是data这个变量本身

    你的mycalss同理

     

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • siki 2017-08-26

    string也是引用类型

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • 摸摸鱼 2017-08-27

    原来如此,多谢老师

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • siki 2017-08-27

    好的

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!