静态继承的排序

时间:2015-11-18 10:53:29

标签: c# inheritance static

我已经看到大量答案说这种情况并不存在,原因有很多 - 而且很多都是有道理的。

对于我的用例,我觉得我所做的事情确实有意义,所以逻辑上应该有办法做到这一点......

我想要一系列静态类,每个类有3个方法。每个类的第一个方法对于每个类都是唯一的,但后两个方法只是第一个方法的转换;即。

public static class A{
  public static double[][] x(...){...}
  public static double[][] y(...){//calls x in here and operates on output}
  public static double[][] z(...){//also calls x in here and operates on output}
}
public static class B{
  public static double[][] x(...){...} //different
  public static double[][] y(...){} //identical to A.y, but calls B.x inside.
  public static double[][] z(...){} //identical to A.Z, but calls B.x inside.
}
public static class C{
  public static double[][] x(...){...}
  public static double[][] y(...){} //identical to A.y, but calls C.x inside.
  public static double[][] z(...){} //identical to A.Z, but calls C.x inside.
}

我宁愿有一种方法来定义静态函数yz,然后只需为每个类定义x实际上我实际上使用

这些类本质上只是不同方法的容器,它们本质上是相同的,但具有不同的底层函数。

有没有办法在没有大量样板的情况下做到这一点?

1 个答案:

答案 0 :(得分:0)

作文怎么样?

public static class Common
{
   public static double[][] X(Func<double[][], ...> func, ...) => func(...);
}

public static class A
{
    public static double[][] X(...) => ...
    public static double[][] Y(...) => Common.X(X, ...); // use A.X
    public static double[][] Z(...) => Common.X(X, ...); // use A.X
}

public static class B
{
    public static double[][] X(...) => ...
    public static double[][] Y(...) => Common.X(X, ...); // use B.X
    public static double[][] Z(...) => Common.X(X, ...); // use B.X
}

Common.X可以是A(或B)的公开方法。 Afaik无法建立静态成员protected,但也许你不在乎是否有人可以访问Common.X