无法访问自定义类堆栈实现中的类

时间:2018-04-15 04:18:00

标签: c#

我的课程结构如下:

public abstract class LogicalTreeNode {
}

public class LogicalOperator:LogicalTreeNode {
    public readonly string value;

    public LogicalOperator(string value) {
        this.value = value;
    }

}

public class ConditionResult:LogicalTreeNode {
    public readonly bool value;

    public ConditionResult(bool value) {
        this.value = value;
    }
}`

我正在尝试使用Stack<LogicalTreeNode>实现一些逻辑。我需要标准堆栈的方法和我自己的TryPush(LogicalTreeNode),这将是递归的(在某些情况下)。所以我这样做:

public class Stack<LogicalTreeNode> : Stack {
    public void TryPush(LogicalTreeNode logicalTreeNode) {
        /*Some logic */
        this.TryPush(new ConditionResult(false));
    }
}

我得到cannot convert ConditionResult to LogicalTreeNode。我在做什么? TIA。

1 个答案:

答案 0 :(得分:1)

您已为[{1}}创建了一个自定义类Stack,其接受System.Collections.Stack

将您的代码更改为 -

Stack<LogicalTreeNode>

如果您特别希望在这种情况下仅使用某种类型(例如public class Stack<T> : Stack { public void TryPush(LogicalTreeNode logicalTreeNode) { /*Some logic */ this.TryPush(new ConditionResult(false)); } } )来实例化您的类,那么您必须这样做 -

LogicalTreeNode

如果您需要继承public class MyStack<T> where T : LogicalTreeNode { public void TryPush(LogicalTreeNode logicalTreeNode) { /*Some logic */ this.TryPush(new ConditionResult(false)); } } 类并将类型限制为System.Collections.Stack,那么请执行此操作 -

LogicalTreeNode

此外,作为一种良好做法,请不要将您的类命名为public class MyStack<T> : System.Collections.Stack : where T : LogicalTreeNode { public void TryPush(LogicalTreeNode logicalTreeNode) { /*Some logic */ this.TryPush(new ConditionResult(false)); } } ,因为它是C#关键字。使用其他名称。

参考文献:

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/generic-classes

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/constraints-on-type-parameters

相关问题