c++里面,函数传入参数前面加修饰const可以让参数在函数中不能修改可是c#有办法么?比如传入参数是一个数组
这个数组很大,复制出一份也不可能,为了效率,我直接传递数组给函数
我又不想让别人修改这个数组
怎么办?类似的问题还有传入类的实例,在函数中只能读取类的属性,而不能修改
怎么办呢?多谢

解决方案 »

  1.   

    很可惜目前没有办法,C#不支持const(原因之一是没有好的运行期强制措施)。如果一定要强调只读,可以用副本方式,或用ReadonlyCollection等方式。
    象你的情况,可以在函数说明中进行强调。
      

  2.   

    哦~~~
    这样啊,真是太遗憾了
    感谢gomoku回答
      

  3.   


    本来数组作参数也是不可修改的啊。
    如果参数是byte[] param
    在函数中进行param = new byte[10];这样的操作对函数外是没用的。
    但是param[0] = xxxx;这个是影响函数外的。
    这,如果不复制一份,阻止不了的。但是可以在方法上面加上“三道杠”啊,说明下不能修改byte。
      

  4.   

    貌似没有直接的办法。下面的可以试试,继承一个ReadOnlyCollectionBase
    提供了一个索引器,以与数组相似的方式来操作,而索引器是只读的,尝试赋值时会出现编译时错误class OnlyReadCollection : System.Collections.ReadOnlyCollectionBase
        {
            private string[] vals = { "1","2","3" };        public string this[int index]
            {
                get 
                {
                    return vals[index];
                }
            }        public override System.Collections.IEnumerator GetEnumerator()
            {
                return vals.GetEnumerator();
            }        public override int Count
            {
                get
                {
                    return vals.Length;
                }
            }
        }
    OnlyReadCollection orc = new OnlyReadCollection();
                foreach (string s in orc)
                    Response.Write(s + "<hr />");                       Response.Write(orc[0]);
      

  5.   

    多谢大家提供了这么多方法总体感觉还是c++的方法比较合适c#里面无法灵活使用比如这个数组传递到函数A中,是允许修改其中内容的,而传递到B中是不允许修改其内容的c#似乎很难实现了