当前位置:编程学习 > C#/ASP.NET >>

关于C#编程语言的一个问题。对类中的数组定义相应的访问属性,是否不利于程序的安全性。

    对类中的数组定义相应的访问属性(而不是用索引器),是否不利于程序的安全性?

代码示例如下:

class A
    {
        public int[] arr = new int[3];
        public int[] Arr   //返回数组的引用.
        {
            get { return arr; }      //返回数组的地址.
            //set { arr = value; } //使指向另一个数组
        }
    }
    class B
    {
        static void Main(string[] args)
        {
            A a = new A();
            for (int i = 0; i < a.Arr.Length; i++)
                a.Arr[i] = i;
            foreach (int n in a.Arr)
                Console.Write(n + "  ");
            Console.Read();
        }
    }

截图如下:

 

由于代码 public int[] Arr{ get { return arr; } }返回的是arr数组的地址,这样子做似乎与直接访问arr没什么差别。所以我有些怀疑这种用法的必要性和安全性。望前辈帮我剖析一下。

补充:C#的数组是引用类型的. public int[] Arr{ get { return arr; } }  这代码返回了数组的地址, 这样是不是将arr数组直接暴露了?
		
追问:大概是。重点想知道 public int[] Arr{ get { return arr; } }这代码是否不利于程序安全。。
答案:你get和set这样和直接访问这个变量本来就没区别,但是如果你在get的时候需要将值做处理,set的是对值进行验证就有些不一样了,比如:

class A {

  int arr;

  public int Arr {

    get { return Math.Abs(arr); } // 返回值永远是一个不小于0的数

    set {

      if (value > 30) throw new Exception("超出范围限定");

      arr = value;

    }

  }

}

如果是这样的封装,那么就和直接访问这个变量有些区别了。

你的意思是在数组中,访问属性与访问字段没什么区别,是不是这个意思?

上一个:C#中的编程小问题
下一个:谁会c#编程?求用c#做一个简单的管理系统,要求有界面设计,要有代码注释

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,