从具有另一种类型属性(.NET 3.5、C#)的抽象类继承
本文关键字:继承 抽象类 NET 另一种 类型 属性 | 更新日期: 2023-09-27 17:56:36
>我有以下 3 个类:
public class BaseProperty1{
public string Property1 {get; set;}
}
public class ChildProperty1 : BaseProperty1 {
}
public abstract class Base{
public abstract BaseProperty1 bp1 {get; set;}
}
我正在尝试从 Base 派生以下类:
public class Child : Base{
public ChildProperty1 bp1 {get; set;}
}
但是我收到一个错误,即未实现"设置"和"获取"方法。只是我使用的语法还是我的思维方式是错误的?
谢谢!
您将无法使用自动属性,因为您必须完全匹配基类的类型。你必须走老式的方式:
public abstract class Child : Base
{
private ChildProperty1 _bp1;
public BaseProperty1 bp1
{
get { return _bp1; }
// Setter will be tricky. This implementation will default to null
// if the cast is bad.
set { _pb1 = value as ChildProperty1; }
}
}
您还可以使用泛型来解决问题:
public abstract class Parent<TProp> where TProp : BaseProperty1
{
public abstract T bp1 { get; set; }
}
public abstract class Child : Parent<ChildProperty1>
{
public ChildProperty1 bp1 { get; set; }
}
如果将方法或属性标记为抽象,则必须在继承的类中实现它。您可以隐藏旧属性(基类中的 bp1),并使用另一个返回类型编写新属性,如下所示:
public abstract class Base{
public BaseProperty1 bp1 {get; set;} //without abstract identifier
}
public class Child : Base
{
public new ChildProperty1 bp1 { get; set; } // with new modifier
}