【发布时间】:2012-12-29 07:26:17
【问题描述】:
我尝试实现以下目标:我有一个名为 IAxis 的接口,它强制我的类 TheAxis 具有某些方法。另外我想实现某种基于参数的抽象类。为了解释这一点,将其写在代码中:
class TheAxis : IAxis
{
public TheAxis(){ }
public void IMoveToPos(int pos) {} //This is forced by the Interface
}
当这个类的实例被调用时,它应该能够选择包含哪些方法,类似于虚拟方法,但不会覆盖现有方法,而是添加来自另一个类的已经编码的方法。我正在寻找这样的东西:
abstract class GateAxis
{
public void CloseGate() { IMoveToPos(0); }
}
abstract class XAxis
{
public void MoveToStart() { IMoveToPos(100); }
}
TheGateAxis = new Axis() as GateAxis;
现在我希望能够使用 TheGateAxis.Closegate();但不是 TheGateAxis.MoveToStart();
如果我打电话
TheXAxis = new Axis() as XAxis;
我希望能够使用 TheXAxis.MoveToStart();但不是 TheXAxis.CloseGate();
XAxis 或 GateAxis 中给出的方法不需要 TheAxis 中的任何方法,除了接口给出的一次。
有可能做这样的事情吗?在实例化类时根据给定的参数向类添加方法?
我希望你能明白我正在努力做的事情,因为我很难解释。
最好, 凯文
【问题讨论】:
-
我不确定我是否理解。如果您知道在初始化期间要使用哪个类,那么为什么不将其声明为该类的变量。例如:
XAxis TheXAxis = new XAxis(); -
你是从VB来的吗?在 C# 中,不要使用
as GateAxis指定创建的类,而应该使用正确的构造函数:new GateAxis() -
嗨,不,我不是来自 VB。我想到了“作为想法”来寻找解决方案并找到虚拟课程。我只是使用了符号。我不想使用 XAxis TheXAxis = new XAxis();因为我需要在所有不同的类中声明 MoveToPos(int pos),尽管它们完全相同。我的程序中有 6 或 7 种类型的轴,并且以完全相同的方式定义相同的方法 6 或 7 次对我来说似乎是不好的做法。此外,代码以后将很难编辑(因为您需要在任何地方更改代码)
-
@Kevin
as运算符仅用于强制转换。除非你还使用GateAxis的构造函数或派生类型,否则它将返回null。在这种情况下,您应该将其完全删除。
标签: c# .net interface abstract