【发布时间】:2011-04-07 02:38:13
【问题描述】:
我给出的示例并不完全是我正在研究的内容,但它是一个近似表示,并且大大简化了确切的问题。我愿意调查所有选项。
我有一个抽象类,其数据值要在后续类中覆盖。
基础抽象类
public abstract class Variable
{
public abstract long data;
}
我有一个子类
public class FloatVariable : Variable
{
public override float data;
}
但是在使用后期动态绑定时我遇到了麻烦
Variable var = new FloatVariable();
var.data = 0.33f;
导致“无法将类型'float'隐式转换为'long'”的错误
显然我做得不对,但是如果有办法覆盖变量(和类型),以便后期动态绑定仍然允许它编译,它会让我的生活变得更轻松。
【问题讨论】:
-
你的类不会编译。你的问题没有意义。而且您没有使用动态绑定。
-
“后期动态绑定”?还有“后期静态绑定”和“早期动态绑定”吗?
-
我意识到后期动态绑定是一个 C++ 术语。这里的概念是我的子类可以覆盖变量,当我使用动态绑定时它不会默认为父变量类型,而是使用子变量类型。
-
您不应该使用
override来覆盖数据类型。如果data变量是必需的,请尝试使用public new float data;。但是,请注意,您很可能会混淆您自己和此代码的未来维护者。 -
我刚刚尝试了
new关键字,但没有成功。
标签: c# oop inheritance abstract-class