-1

我有以下课程

public class MyClass
{
  public int ElementId {get; set;}
  public int? LowerBoundary {get; set;}
  public int? UpperBoundary {get; set;}

  public int  SpecificMethod() {}

  public void CommonMethod()
  {
    int expectedValue = SpecificMethod();
  }
}

CommonMethod() 对于此类的每个实例都是相同的,但我希望 SpecificMethod() 对于每个实例都不同。此方法应始终返回一个 int,但它可以采用 0、1 或 2 个参数(它们是它自己的 LowerBoundary 和 UpperBoundary 属性值)。

有没有办法做到这一点?由于参数的数量是可变的,我知道我不能让 SpecificMethod 成为 Func 属性。

4

1 回答 1

1

也许您可以使用params关键字:

public class MyClass
{

  public int SpecificMethod(params int[] values)
  {
    switch (values.Length)
    {
      case 0:
        ...
        break or return ...;
      case 1:
        ...
        break or return ...;
      case 2:
        ...
        break or return ...;
      default:
        ...
        break or return ...;
    }
    //return ...;
  }
}

https://docs.microsoft.com/dotnet/csharp/language-reference/keywords/params

您还可以定义三个重载方法:

public class MyClass
{
  public int SpecificMethod()
  {
    return 0;
  }
  public int SpecificMethod(int value)
  {
    return 0;
  }
  public int SpecificMethod(int value1, int value2)
  {
    return 0;
  }
}

您可以使用所需的任何类型创建尽可能多的重载方法。

https://docs.microsoft.com/dotnet/standard/design-guidelines/member-overloading

如果仅由实例使用,也许您可​​以将方法设置为私有或受保护。

于 2020-07-08T23:05:25.787 回答