C#抽象类错误

时间:2012-10-24 10:25:06

标签: c# abstract

public abstract class IEnvelopeFactory {

    public Queue<IEnvelopeFactory> m_Queue<IEnvelopeFactory>;

    public IEnvelopeFactory() { }

    ~IEnvelopeFactory() { }

    public virtual void Dispose() { }

    /// <summary>
    /// Parsing
    /// </summary>
    /// <param name="input"></param>
    /// <param name="envelope"></param>
    public abstract bool Parse(string input, out Envelope envelope);

    /// <summary>
    /// Formatting
    /// </summary>
    /// <param name="env"></param>
    /// <param name="envStr"></param>
    public abstract bool Format(Envelope env, out string envStr);
}

我收到错误,因为语法错误&#39;(&#39; Line public Queue m_Queue;

7 个答案:

答案 0 :(得分:6)

这与它是一个抽象类没有任何关系。它只是一个无效的变量声明:

public Queue<IEnvelopeFactory> m_Queue<IEnvelopeFactory>;

您期望第二个<IEnvelopeFactory>做什么?它为Queue<T>指定了泛型类型参数。它应该只是:

public Queue<IEnvelopeFactory> m_Queue;

...虽然理想情况下你首先没有公共领域。

(我还建议反对添加终结器只是为了它。终结器很少非常。而且,如果你要有一个Dispose方法,为什么不实施IDisposable?)

答案 1 :(得分:1)

尝试更改为:

public abstract class IEnvelopeFactory {    
    public Queue<IEnvelopeFactory> m_Queue;
}

答案 2 :(得分:1)

您已经强烈指定了类型,无需将通用部分添加到变量名称:

public Queue<IEnvelopeFactory> m_Queue;

答案 3 :(得分:0)

make m_Queue<IEnvelopeFactory> =&gt; m_Queue

换句话说:

public Queue<IEnvelopeFactory> m_Queue;

如果您不希望出于某种原因立即对其进行初始化。

答案 4 :(得分:0)

也许是因为它应该是:

public Queue<IEnvelopeFactory> m_Queue = new Queue<IEnvelopeFactory>();

答案 5 :(得分:0)

将您的代码更改为 -

public Queue<IEnvelopeFactory> m_Queue;

队列类的语法 -

[SerializableAttribute]
[ComVisibleAttribute(false)]
public class Queue<T> : IEnumerable<T>, ICollection, 
    IEnumerable

您可以在类中将引用变量定义为 -

public Queue<IEnvelopeFactory> m_Queue;

您可以在类 -

中初始化Queue变量
public Queue<IEnvelopeFactory> m_Queue = new Queue<IEnvelopeFactory>();

答案 6 :(得分:0)

public Queue<IEnvelopeFactory> m_Queue;

这就够了:您已经指定了m_Queue变量的确切类型。