【问题标题】:Sort of static inheritance静态继承排序
【发布时间】:2015-11-18 10:53:29
【问题描述】:

我已经看到很多答案说这不存在,出于各种原因 - 其中很多是有道理的。

然而,对于我的用例,我觉得我正在做的事情确实有意义,因此从逻辑上讲应该有一种方法来做到这一点......

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

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

类本质上只是不同方法的容器,它们本质上是相同的,但具有不同的底层功能。

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

【问题讨论】:

  • 如何让这个类成为非静态类并使用单例模式?
  • “所以逻辑上应该有办法做到这一点......” - 不,这是一个错误的假设。仅仅因为它有意义,它就不一定是可能的。我认为您所追求的是单例模式。
  • 编写一个接受委托的方法(调用x())并使用不同的委托从A.yB.yC.y 调用此方法。例如。 B.y() 将使用 B.x 调用它。
  • “我想要一系列的静态类,每个有3个方法。” => 为什么这些方法和类都需要static? “我想要”不是技术要求。
  • 有很多方法可以解决这个问题。这取决于具体情况。显示实际示例。你打算如何使用这些静态类?

标签: c# inheritance static


【解决方案1】:

作曲怎么样?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 2012-06-21
    • 2012-12-02
    • 2015-03-20
    • 2015-06-10
    • 2011-04-16
    相关资源
    最近更新 更多