从具有另一种类型属性(.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;}
}

但是我收到一个错误,即未实现"设置"和"获取"方法。只是我使用的语法还是我的思维方式是错误的?

谢谢!

从具有另一种类型属性(.NET 3.5、C#)的抽象类继承

您将无法使用自动属性,因为您必须完全匹配基类的类型。你必须走老式的方式:

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
}