【发布时间】:2014-03-01 06:16:23
【问题描述】:
是否有可能以某种方式出现这种情况,其中 A.N 使用此代码示例从 A 继承代码?
这样设置的原因是,我需要多个继承自Base<TType> 和Nested : Base<TType> 的类,其中服务器只有基础,而客户端有扩展的嵌套。这样一来,使用代码就很容易了,他们之间可以有一些共享代码。
问题是我必须在
A and A.N
B and B.N
C and C.N
等等。
我已经暂时解决了这个问题,通过用接口替换嵌套抽象类并执行A.N : A, INested,但现在我必须在所有嵌套类中再次重写Base<TType>.Nested 代码。目前,嵌套类很小且易于管理。
希望这不是一个令人困惑的问题...
public abstract class Base<TType> where TType : class
{
public TType data;
internal void CommonCodeForAll() { }
public abstract void Update();
public abstract class Nested : Base<TType>
{
public abstract void Input();
}
}
public class A : Base<someClass>
{
public float Somevariable;
public void SpecificFunctionToA() { }
public override void Update()
{
// code that gets executed on server & client side that is unique to A
}
public class N : A.Nested
{
public override void Input()
{
if (data.IsReady()) { Somevariable *= 2; }
SpecificFunctionToA();
}
}
}
public class B : Base<anotherClass>
{
public float Somevariable;
public int index;
public int[] Grid;
public void SomethingElse() { }
public override void Update()
{
// code that gets executed on server & client side that is unique to B
}
public class N : B.Nested
{
public override void Input()
{
if (Grid[index] == -1) { SomethingElse(); }
data.Somevariable = Grid[index];
}
}
}
编辑:
我更新了代码示例以显示我想要实现的目标。
我为什么要这样做,是为了保持物理、网络和用户输入分开。
有多个不同的控制器,每个控制器都有自己的打包和解包功能、控制器身份和对物理引擎的访问权限。
【问题讨论】:
-
好问题。对于那些不明白你想在实现的嵌套方法中使用实现的基方法的人。您想从
Input()调用Update(),例如由class A实现。 -
@ja72 是的,+ 特定于 A、B、C 等的附加方法和变量。就像 AN 直接从 A 继承,而 BN 将直接从 B 继承等等。
-
也许你需要类封装而不是继承。我将尝试组合一个解决方案来说明。
标签: c# visual-studio-2010 generics inheritance nested-class