我在覆盖来自接口(interface)的属性时遇到了问题。我有一个实现接口(interface)的基类。这个类有大约 10 个子类。在某些情况下,子类应该覆盖来自接口(interface)的属性。
我的问题是,我在访问该属性时并不知道该对象具有什么类型的类,并且该对象总是返回基类属性值而不是覆盖的子类属性值。
简化的示例代码:
public interface Inf
{
string Info
{
get;
}
}
public class BaseClass : Inf
{
public string Info
{
get { return "Something"; }
}
}
public class SubClass : BaseClass
{
new public string Info
{
get { return "Something else"; }
}
}
在另一个类中我必须访问该属性,此时我不知道该对象是基类还是子类
List<BaseClass> listBase = new List<BaseClass>();
listBase.Add(new BaseClass());
listBase.Add(new SubClass());
foreach (BaseClass obj in listBase)
{
Console.WriteLine(obj.Info);
}
输出:
Something
Something
想要的输出:
Something
Something else
((SubClass)obj).Info 会输出“Something else” 但是在这个特定的时刻我不知道对象是什么类。 (我有大约 10 个不同的子类)。
我是否必须将所有对象转换为它的真实类?我在这个列表中得到了大约 100-200 个对象和大约 10 个不同的类。还是有其他方法可以做到这一点?
感谢任何帮助:)
最佳答案
您应该在基类中使属性实现虚拟
,并在派生类的实现中放置override
而不是new
。这应该可以解决问题。
目前,从接口(interface) Inf
提供属性 Info
的实现的唯一类是您的 BaseClass
。根据你的代码,编译器认为派生类 SubClass
引入了一个新的同名属性,这是合法的。只有当您直接使用该类而不是通过接口(interface)时,才能访问此类属性。
关于c# - 从基类接口(interface)覆盖子类中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17613411/