gpt4 book ai didi

c# - 从其通用父类继承的嵌套类

转载 作者:行者123 更新时间:2023-11-30 12:46:03 25 4
gpt4 key购买 nike

这是否可能以某种方式出现这种情况,其中 A.N 通过此代码示例从 A 继承代码?

这样设置的原因是我需要多个继承自 Base<TType> 的类和 Nested : Base<TType>服务器只有基础,客户端有扩展的嵌套。这样,使用代码会很容易,因为他们之间会共享一些代码。

问题是我必须在

中编写相同的代码
A and A.N  
B and B.N
C and C.N

我暂时解决了这个问题,方法是用一个接口(interface)替换嵌套抽象类并执行
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];
}
}
}

编辑:我更新了代码示例以展示我想要实现的目标。
我为什么要这样做,是为了将物理、网络和用户输入分开。有多个不同的 Controller ,每个 Controller 都有自己的打包和解包功能、 Controller 身份和对物理引擎的访问权限。

最佳答案

我有一个使用类封装而不是继承的解决方案。

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();
}
}

关于c# - 从其通用父类继承的嵌套类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21566701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com