如何以更动态的方式设置 C# 向下转换
How to setup C# downcasting in a more dynamic way
如果标题不太正确,请见谅。
我有一组基础 classes 我是从中派生的。有一个主要的和一堆我可以添加到它上面的组件。
public class Entity {
public EntityPart ep;
}
public class EntityPart {
public void eFunc() {}
}
我派生的 classes 显然非常适合我所有的虚函数。但这是我 运行 进入
的问题
public class dEntity : Entity {
public void someFunc() {
ep.derivedFunc(); // Error, does not exist on EntityPart
}
}
public class dEntityPart : EntityPart {
public void derivedFunc() {}
}
我很快就明白发生了什么事。由于 ep
仍然只是一个 EntityPart
,它没有派生功能。
我找到了一个有效的解决方案,但感觉有些地方不对劲。当我问其他人时,他们似乎对我的代码以前不起作用感到困惑。
public class dEntity : Entity {
public new dEntityPart ep {
get { return (dEntityPart)base.ep; }
}
}
据我了解,这只是将名为 ep
的变量声明为 dEntityPart
类型。这是一个 属性 并具有将 base.ep
(即 EntityPart
)转换为 dEntityPart
的 get 函数。 new
关键字在 class.
中隐藏基数
我想先确认一下这个理解是否正确。
这完全符合我的需要,但看起来很乱。我有很多这些 class 的推导集,每一个都有很多部分。这种方法感觉有点慢和麻烦。有没有一种方法可以将这种向下转换设置为始终存在,或者是否有一种方法可以设置一些泛型来像这样工作?
如果是这样的话,好吧。我可能对设置此类代码的更优雅的方法或更好的方法感兴趣。谢谢!
这对你有用吗?
public class Entity<T> where T : EntityPart {
public T ep;
}
public class EntityPart {
public void eFunc() {}
}
public class dEntity : Entity<dEntityPart> {
public void someFunc() {
ep.derivedFunc(); // This won't throw an error anymore.
}
}
public class dEntityPart : EntityPart {
public void derivedFunc() {}
}
如果标题不太正确,请见谅。
我有一组基础 classes 我是从中派生的。有一个主要的和一堆我可以添加到它上面的组件。
public class Entity {
public EntityPart ep;
}
public class EntityPart {
public void eFunc() {}
}
我派生的 classes 显然非常适合我所有的虚函数。但这是我 运行 进入
的问题 public class dEntity : Entity {
public void someFunc() {
ep.derivedFunc(); // Error, does not exist on EntityPart
}
}
public class dEntityPart : EntityPart {
public void derivedFunc() {}
}
我很快就明白发生了什么事。由于 ep
仍然只是一个 EntityPart
,它没有派生功能。
我找到了一个有效的解决方案,但感觉有些地方不对劲。当我问其他人时,他们似乎对我的代码以前不起作用感到困惑。
public class dEntity : Entity {
public new dEntityPart ep {
get { return (dEntityPart)base.ep; }
}
}
据我了解,这只是将名为 ep
的变量声明为 dEntityPart
类型。这是一个 属性 并具有将 base.ep
(即 EntityPart
)转换为 dEntityPart
的 get 函数。 new
关键字在 class.
中隐藏基数
我想先确认一下这个理解是否正确。
这完全符合我的需要,但看起来很乱。我有很多这些 class 的推导集,每一个都有很多部分。这种方法感觉有点慢和麻烦。有没有一种方法可以将这种向下转换设置为始终存在,或者是否有一种方法可以设置一些泛型来像这样工作?
如果是这样的话,好吧。我可能对设置此类代码的更优雅的方法或更好的方法感兴趣。谢谢!
这对你有用吗?
public class Entity<T> where T : EntityPart {
public T ep;
}
public class EntityPart {
public void eFunc() {}
}
public class dEntity : Entity<dEntityPart> {
public void someFunc() {
ep.derivedFunc(); // This won't throw an error anymore.
}
}
public class dEntityPart : EntityPart {
public void derivedFunc() {}
}