寻找类似私有接口的东西
本文关键字:接口 寻找 | 更新日期: 2023-09-27 17:56:09
我最近有一些事情一直困扰着我。你看,我发现自己在游戏的各个职业中一遍又一遍地编写完全相同的私有函数。本质上,它只是一个构建类对象的方法;它是一种初始化方法。下面是一个简短的示例:
public class MyClass {
public MyClass() {
Initialize();
}
private void Initialize() {
// do kung fu
}
}
如您所见,私有方法是在构造函数中调用的。我想在我目前的项目中,我可能至少做了二十+次这样的事情。现在,我想要一种简单的方法来实现它 - 通过视觉工作室/修磨器折射器 - 轻松实现。
使用 Visual Studio 和接口时,需要订阅所有接口方法。我喜欢这个;Visual Studio自动帮助我做到这一点,我喜欢基于订阅的界面使用。
唯一真正的问题是接口不能有私有方法。所以,我想我的问题是:下一个最好的东西是什么,有助于促进私有(和必需的)方法,同时像接口一样?我还应该提到继承是不可能的,因为大多数类在功能上没有任何关系。
你正在寻找的东西不能通过巧妙地使用类型系统来完成。
(如果继承不是不可能的,则可以创建一个abstract
基类,其中包含一个protected abstract Initialize()
方法和一个调用前一种方法的protected
构造函数。
如果您正在使用Visual Studio,我建议您按照以下行创建一个IDE代码片段:
class <ClassName>
{
public <ClassName>
{
Initialize();
}
private void Initialize()
{
// do kung fu
}
}
然后,您可以为其分配一个简短的字母组合,例如 cwinit
,每当您键入 cwi ni tTab 时,都会为您插入该代码段,您可以覆盖<ClassName>
占位符。
您可以创建这样的代码段,例如使用代码段设计器扩展。
首先,我认为您应该在构造函数中编写对象构造代码,而不是在调用的单独方法中编写。
其次,你的方法被打破了:你可以强制一个类实现一个方法,但你不能强制调用它。由于从构造函数内部调用方法是危险的(由于半初始化的实例),因此将virtual
方法与派生类一起使用时。我认为你应该完全避免使用它。
没有像私有接口这样的东西。接口旨在告诉外部世界类型的一些特征,而不是类的内部。除此之外,你不能强制调用该方法,所以这种方法是错误的。
您必须强制执行的唯一(工作)可能性是使用抽象Intitialize
方法创建一个抽象基类,但我怀疑这是否是要走的路(我不建议这样做)。
像这样:
public abstract class BaseClass
{
public BaseClass()
{
this.Initialize();
}
protected abstract void Initialize();
}
我的观点是抽象类在这里是一个坏主意,至少因为只能从一个其他类继承,而不能继承更多。怎么样:
-
创建和实现公共接口,但不使用它;无法创建接口类型的实例;
-
使用某种接受类实例作为 ref 参数的帮助程序类;
类设置初始化{ static YourClassName SetValue(ref YourClassName instance) { ...你的逻辑在这里 }}