【问题标题】:How to pass undetermined number of arguments to base constructor?如何将不确定数量的参数传递给基本构造函数?
【发布时间】:2015-10-08 08:40:00
【问题描述】:

如果这是可能的,应该用什么代替%PARAMS%

class ParentClass
{
    public BaseClass( params int[] intList )
    { (...) }
}

class ChildClass : BaseClass
{
    public ChildClass( params int[] intList ) : base( %PARAMS% )
    { (...) }
}

PS.:对不起,如果这是一个新手问题,我刚开始写 C#。

【问题讨论】:

    标签: c# inheritance constructor arguments


    【解决方案1】:

    这符合您的需求吗?

    class ParentClass
    {
        public BaseClass( params int[] ints )
        {  }
    }
    
    class ChildClass : BaseClass
    {
        public ChildClass( params int[] ints ) : base( ints )
        {  }
    }
    

    或者这个:

    class ParentClass
    {
        public BaseClass( IEnumerable<int> ints )
        {  }
    }
    
    class ChildClass : BaseClass
    {
        public ChildClass( IEnumerable<int> ints ) : base( ints )
        {  }
    }
    

    【讨论】:

    • 没有。实际上我想使用不确定数量的参数。这确实很简单。我只是问,因为它不像平常那​​样直观,而且我找不到该主题的答案。
    • 什么意思?你能解释一下use indeterminate number of arguments是什么意思吗?
    • 好吧,可能你比我知道的多得多:),但是实例化这个类应该类似于new ChildClass(3, 5, 8);。这样您就可以使用任意数量的参数。
    • 是的,实际上,我在写完问题后就尝试了这个。它有效。
    【解决方案2】:

    试试吧

    public ChildClass( params int[] intList ) : base( intList )
    

    10.5.1.4 Parameter arrays(强调我的):

    参数数组允许在方法调用中以两种方式之一指定参数:

    • 为参数数组提供的参数可以是可隐式转换(第 6.1 节)为参数数组类型的类型的单个表达式。在这种情况下,参数数组的作用与值参数完全相同。
    • 或者,调用可以为参数数组指定零个或多个参数,其中每个参数都是可隐式转换(第 6.1 节)为参数数组元素类型的类型的表达式。在这种情况下,调用会创建一个参数数组类型的实例,其长度对应于参数的数量,用给定的参数值初始化数组实例的元素,并使用新创建的数组实例作为实际参数。

    所以如果有一个函数:

     void Function(params int[] list) {  }
    

    它可以通过不同的方式调用:

    Function(0, 1, 2, 3);
    Function(new int[] { 0, 1, 2, 3 });
    var a = new int[] { 0, 1, 2, 3 };
    Function(a);
    ChildClass c = new ChildClass(1, 2, 3);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-04
      • 2013-11-15
      • 1970-01-01
      • 2019-01-06
      • 2014-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多