是否可以进行静态部分 类?

Is it possible to do static partial classes?

我想把我已有的 class 拆分成几个小的 class 以便更容易维护和阅读。但是我尝试使用 partial 拆分的这个 class 是静态 class.

我在 Whosebug 上的一个示例中看到这是可能的,但是当我这样做时,它一直告诉我我不能从静态 class 派生,因为静态 classes 必须派生来自对象。

所以我有这个设置:

public static class Facade
{
    // A few general methods that other partial facades will use
}

public static partial class MachineFacade : Facade
{
    // Methods that are specifically for Machine Queries in our Database
}

有什么指点吗?我希望 Facade class 是静态的,这样我就不必在使用前对其进行初始化。

在文件中保持命名和修饰符一致:

public static partial class Facade
{
    // A few general methods that other partial facades will use
}

public static partial class Facade
{
    // Methods that are specifically for Machine Queries in our Database
}

你不需要覆盖任何东西,只需要给它们相同的名字:

public static partial class Facade
{
    // this is the 1st part/file
}

public static partial class Facade
{
    // this is the 2nd part/file
}

问题不在于 class 是 partial class。问题是您试图从另一个派生 static class。派生 static class 没有意义,因为您无法使用多态性和其他继承原因。

如果要定义 partial class,请创建具有相同名称和访问修饰符的 class。

can not inherit a static class

Static classes are sealed and therefore cannot be inherited. They cannot inherit from any class except Object.

C# 不支持从静态 class 继承。

您必须在 class 是静态的之间做出选择:

public static class Facade
{
    // A few general methods that other partial facades will use
}

public static partial class MachineFacade
{
    // Methods that are specifically for Machine Queries in our Database
}

...或者您是否希望 MachineFacade 从 Facade 派生:

public class Facade
{
    // A few general methods that other partial facades will use
}

public partial class MachineFacade : Facade
{
    // Methods that are specifically for Machine Queries in our Database
}

虽然我来不及参加派对...
根据您的问题描述,我认为您的目标是:

  1. 想要静态方法组。
  2. 想要它的一个子组专门用于某个领域。

在这种情况下,我建议使用嵌套 classes:

public static class Facade
{
    // some methods

    public static class Machine
    {
        // some other methods
    }
}

优点:

  1. 方法是静态的。您可以直接使用它们而无需初始化任何实例。
  2. 嵌套的 class 名称像名称空间一样使用。您代码的读者清楚地知道 Facade.Machine 方法比 Facade 方法及其目标域更具体。
  3. 您可以使具有相同签名的方法在不同 class 级别做不同的事情来模拟方法覆盖。

缺点:

  1. 无法禁止用户调用 Facade.Machine 不应调用的方法。
  2. 没有继承。 Facade.Machine 不会自动拥有来自 Facade 的方法。