这有可能以某种方式,这个场景,A.N从这个代码示例继承A的代码?
这样设置的原因是我需要从Base< TType>继承的多个类.和嵌套:基础< 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]; } } }
编辑:
我更新了代码示例,以显示我正在尝试实现的目标.
为什么我要这样做,就是保持物理,网络和用户输入分开.
有多个不同的控制器,每个控制器都有自己的包装和放大器.拆包功能,控制器身份和访问物理引擎.
解决方法
我有一个使用类的ecapsulation而不是继承的解决方案.
public abstract class BaseGeneric<T> { T data; // ctor protected BaseGeneric(T data) { this.data=data; } // methods public abstract void Update(); // properties public T Data { get { return data; } set { data=value; } } // base nested class public abstract class BaseNested<B> where B : BaseGeneric<T> { protected B @base; // ctor protected BaseNested(B @base) { this.@base=@base; } // methods public abstract void Input(T data); public void Update() { @base.Update(); } // properties public T Data { get { return @base.data; } set { @base.data=value; } } } } // implementation base public class Base : BaseGeneric<int> { // ctor protected Base(int data) : base(data) { } //methods public override void Update() { this.Data+=1; } // implemented nested class public class Nested : Base.BaseNested<Base> { // ctor public Nested(int data) : base(new Base(data)) { } public Nested(Base @base) : base(@base) { } // methods public override void Input(int data) { this.Data=data; } } } class Program { static void Main(string[] args) { // new implemented class with value 0 var nested=new Base.Nested(0); // set value to 100 nested.Input(100); // call update as implemented by `Base`. nested.Update(); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。