是否可以进行静态部分 类?
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
}
虽然我来不及参加派对...
根据您的问题描述,我认为您的目标是:
- 想要静态方法组。
- 想要它的一个子组专门用于某个领域。
在这种情况下,我建议使用嵌套 classes:
public static class Facade
{
// some methods
public static class Machine
{
// some other methods
}
}
优点:
- 方法是静态的。您可以直接使用它们而无需初始化任何实例。
- 嵌套的 class 名称像名称空间一样使用。您代码的读者清楚地知道
Facade.Machine
方法比 Facade
方法及其目标域更具体。
- 您可以使具有相同签名的方法在不同 class 级别做不同的事情来模拟方法覆盖。
缺点:
- 无法禁止用户调用
Facade.Machine
不应调用的方法。
- 没有继承。
Facade.Machine
不会自动拥有来自 Facade
的方法。
我想把我已有的 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
}
虽然我来不及参加派对...
根据您的问题描述,我认为您的目标是:
- 想要静态方法组。
- 想要它的一个子组专门用于某个领域。
在这种情况下,我建议使用嵌套 classes:
public static class Facade
{
// some methods
public static class Machine
{
// some other methods
}
}
优点:
- 方法是静态的。您可以直接使用它们而无需初始化任何实例。
- 嵌套的 class 名称像名称空间一样使用。您代码的读者清楚地知道
Facade.Machine
方法比Facade
方法及其目标域更具体。 - 您可以使具有相同签名的方法在不同 class 级别做不同的事情来模拟方法覆盖。
缺点:
- 无法禁止用户调用
Facade.Machine
不应调用的方法。 - 没有继承。
Facade.Machine
不会自动拥有来自Facade
的方法。