如何解决C#使用更具体的类型覆盖抽象属性
我有一个相当简单的问题,但是我在任何地方都找不到合适的解决方案。我想在我的抽象父类中指定一个抽象对象CustomValues作为属性。但是,从其继承的类应该能够使用更特定的类型作为此属性CustomValues的对象。起初,我以为我可以通过界面解决问题,但是不幸的是,这也没有解决。您如何做那样的事,它能起作用?
public abstract class MyAbstract {
public abstract object CustomValues { get; set; }
}
public class MyImplementation : MyAbstract {
public override MySpecificclass CustomValues { get; set; }
}
这将引发三个错误:
解决方法
注释中建议的解决方案如下所示。 (我假设CustomValues
应该是某物的集合。)
public class MyClass<T>
{
public ICollection<T> CustomValues { get; set; }
}
或者确保CustomValues
本身不能被重新分配,但是可以被访问并添加到:
public class MyClass<T>
{
public ICollection<T> CustomValues { get; } = new List<T>();
}
,
我认为您最初使用接口(+通用)的想法是正确的。通常,您可能还需要添加类型约束。
public interface ICustomValues {
....
}
public class MySpecificClass : ICustomValues {
....
}
public abstract class MyAbstract<T> where T : ICustomValues {
public abstract T CustomValues {
get;
set;
}
}
public class MyImplementation: MyAbstract<MySpecificClass> {
public override MySpecificClass CustomValues { get; set; }
}
,
谢谢大家。我通过使用通用正确地找到了解决方案:
public abstract class MyAbstract<T> {
public abstract T CustomValues { get; set; }
}
public class MyImplementation : MyAbstract<MySpecificClass> {
public override MySpecificClass CustomValues { get; set; }
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。