c# 请问数组能作为参数传递吗? 如果可以如何传递呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# 请问数组能作为参数传递吗? 如果可以如何传递呢?相关的知识,希望对你有一定的参考价值。

请问数组能作为参数传递吗? 如果可以 如何传递呢?

C#中数组是可以做为参数传递的,C#中传值可以用Form与Form之间传参数的方法来实现。只要在第二个Form里的默认构造函数添加具体的参数,然后在第一个Form里具体实现传值的事件里添加Form2 frm2=new Form2(数组参数);frm2.ShowDialog();第二个Form加载后,就可以在第二个Form添加变量获取传递的参数了。 参考技术A 是可以的..例如:

//定义一个动态数组
ArrayList o_ArrayList_1=new ArrayList();
//记录存放数据
string strBATCH_NO =" ";
for(int i=0;i<10;i++)

strBATCH_NO=i.ToString();
//将数据Add进数组1
o_ArrayList_1.Add(strBATCH_NO);


//调用delete方法删除,这里传递数组1
bool DEL=this.Delete(o_ArrayList_1);
//定义第二个数组
ArrayList o_ArrayList_2=new ArrayList();

//delete方法的参数要声明为ArrayList
public bool Delete(ArrayList o_aBatchNoList)

foreach(string s_BatchNo in o_aBatchNoList)

//将第一个数组添加进第二个数组
o_ArrayList_2.add(s_BatchNo);

参考技术B 可以啊,只不过传递的是引用,就像C语言里面的指针或者C#用ref传递的值类型 参考技术C 就和普通变量的方式一样啊 参考技术D 应该可以的,不过我没试过

C#中数组作为参数传递的问题

原则:尽可能控制对数据的修改,如果可以预测某个数据不会或不应该被改变,就要对其控制,而不要期望使用这个数据的调用者不会改变其值。

如果参数在使用过程中被意外修改,将会带来不可预知的结果,而且这种错误很难被检查到,所以我们在设计方法参数的时候,要充分考虑传递引用类型参数或者引用方式传递引用类型参数可能带来的后果。

如果一个数据在传递过程中不能被改变,就要在构建这个对象的时候就使其值(字段或属性)不被改变。

一、对于简单的参数的控制

1、值类型参数传递

这种情况因为传递的是参数的副本,不影响原始值,不需要控制。

2、引用类型参数传递

    a、由值类型组成的数据结构

需要将字段设置为只读,属性只有get。赋值只能通过构造方法进行。

    b、包含引用类型字段的数据结构

这种情况是递归的,需要保证字段为readonly,属性为get的同时,引用类型字段所使用类型也满足该要求。

public class SuperClass
{
    private readonly int  _no;
    private readonly SubClass _tag;

    public int NO
   {
         get{ return _no;}
   }
   
    public SubClass Tag
    {
         get{ retirn _tag;}
     }
     
      public SuperClass(int no,SubClass tag)
      {
            _no=no;
            _tag=tag;    
       }
}


public class SubClass
{
     private readonly int _field;
    
     public int Field
     {
          get{ return _field;}
     }

     public SubClass(int field)
    {
          _field=field;
     }
}    

 

二、对于复杂引用类型参数传递的控制

所谓复杂,是参数是数组或集合类型,或者参数包含这些类型数据,这种情况下上面的方法不能保证参数数据不被修改,因为即使对象为只读的,但是对象中的数组或集合字段(属性)还是可以修改的。

1、集合参数(包含集合字段的引用参数也一样)

.net 4.5以前版本可以使用不包含修改集合元素方法的接口来代替具体集合类型。例如使用IEnumerable<T>接口代替List<T>。4.5版本可以直接使用IReadOnlyCollection接口或实现该接口的集合类型。

2、数组参数

没有好的办法保护数组类型参数不被修改,所以尽量避免使用数组类型作为方法参数,除非用到可选参数时候。

 

三、理解上面的东西需要区分清楚一下概念的区别

1、值类型和引用类型的区别

2、值传递和引用传递(ref和out)的区别

3、传递引用类型参数和引用传递(ref和out)引用类型参数的区别 [这一点最容易混淆]

区别在于使用该参数过程中为该引用新建了对象的情况下,前者不影响原始值,后者影响原始值,示例:

void FunA(MyClass a)

{

     a=new MyClass("A");

}

 

void FunB(ref MyClass a)

{

     a=new MyClass("B");

}

 

void Test()

{

  MyClass a=new MyClass("A");   

      FunA(a);                

      Print(a);              //a还是原始的对象 TEST

 

      FunB(ref a);

       Print(a);               //a变为新对象   B

}

 记住一条原则:

值类型传递的是值的副本,引用类型传递的是对象引用,所以值参数的修改不影响原始值,引用类型的修改影响原始值;值传递的参数构建不影响原始值,引用传递(ref和out)影响原始值。

 

以上是关于c# 请问数组能作为参数传递吗? 如果可以如何传递呢?的主要内容,如果未能解决你的问题,请参考以下文章

C#中数组作为参数传递的问题

将静态数组作为参数传递

如何将二维数组类型 char(字符串)作为函数参数传递?

我们如何在 C++ 中将二维数组/向量作为函数参数传递? [复制]

我们可以在 PHP 中的任何函数中将数组作为参数传递吗?

请问这个C语言中有参数的函数是怎么传递值的,调用的时候没有参数啊。