定义可由父类设置的抽象属性

问题描述 投票:0回答:1

我不太熟悉 C# 或抽象类,因此这可能是一个简单的修复。我有一个带有可为空 Action 属性的抽象类:

public abstract class MyAbstractClass {
    public abstract Action<MyType>? myAbstractAction { get; set; }
}

具体类:

public class MyConcreteClass: MyAbstractClass {
    // This gives me a warning that I'm "hiding" the abstract property
    public override Action<MyType>? myAbstractAction = null;
}

Action 属性只能由具体类的父类设置:

public classs MyParentClass {
    public MyConcreteClass concreteClassInstance;

    public MyParentClass(MyConcreteClass concreteClassInstance) {
        this.concreteClassInstance = concreteClassInstance;
        this.concreteClassInstance.myAbstractAction = //...
    }
}

我的问题是我不确定如何在 MyConcreteClass 中定义 Action。我上面使用的给出默认值 null 的行会导致错误,指出它“隐藏继承的成员”,这似乎不是我想要的。我认为它希望我提供实际的获取/设置块,但我认为这对我不起作用,因为它是外部类决定操作的作用。我有点觉得我可能使用了错误的工具来完成这里的工作,所以希望得到更熟悉该语言的人的指导。

c# abstract-class
1个回答
0
投票

您收到该警告的原因是在基类中您声明了一个属性

myAbstractAction
,而在子类中您声明了一个字段
myAbstractAction
。所以有两个同名的成员。

此房产:

public abstract Action<MyType>? myAbstractAction { get; set; }

应该像这样被覆盖:

public override Action<MyType>? myAbstractAction { get; set; }

您应该输入

get
set

© www.soinside.com 2019 - 2024. All rights reserved.