C# no Suitable method found for override

hi this is my base class

public abstract class IEnvelopeFactory {

        public Queue<IEnvelopeFactory> m_Queue;
        //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);

    }

and the Child Class is as follows

public class XMLTYPE4Factory : IEnvelopeFactory
    {

        public XMLTYPE4 m_XMLTYPE4;

        public XMLTYPE4Factory()
        {

        }

        ~XMLTYPE4Factory()
        {

        }

        public override void Dispose()
        {

        }

        /// <summary>
        /// Parsing
        /// </summary>
        /// <param name="input"></param>
        public override Envelope Parse(string input)
        {

            return null;
        }

        /// <summary>
        /// Formatting
        /// </summary>
        /// <param name="env"></param>
        public override string Format(Envelope env)
        {

            return "";
        }

    }

I am getting the following error

'XMLTYPE4Factory' does not implement inherited abstract member 
'IEnvelopeFactory.Format(CCN.MSG.ENV.Envelope, out string)' 


'XMLTYPE4Factory' does not implement inherited abstract member 
'IEnvelopeFactory.Parse(string, out CCN.MSG.ENV.Envelope)'

Upvotes: 0

Views: 3480

Answers (3)

Prabhu Murthy
Prabhu Murthy

Reputation: 9261

you have not implemented the methods with correct parameters

Envelope env;
string s;

public override Envelope Parse(string input,out Envelope env)
{
    env = new Envelope();
    return env;
}

public override string Format(Envelope env,out string s)
{
    s="somestring";
    return s;
}

Upvotes: 1

AbdElRaheim
AbdElRaheim

Reputation: 1394

Yeah the signature doesn't match what you have defined in the base class. Is format supposed to return a string and have a string as an output parameter as well?

Also the standard naming convention in C# interfaces start with I. You should remove the I prefix from your base class.

public class XMLTYPE4Factory : IEnvelopeFactory {

    public XMLTYPE4 m_XMLTYPE4;

    public XMLTYPE4Factory()
    {

    }

    ~XMLTYPE4Factory()
    {

    }

    public override void Dispose()
    {

    }

    /// <summary>
    /// Parsing
    /// </summary>
    /// <param name="input"></param>
    public override Envelope Parse(string input, out string envStr)
    {
envStr= null;
        return null;
    }

    /// <summary>
    /// Formatting
    /// </summary>
    /// <param name="env"></param>
    public override string Format(Envelope env, out string envStr)
    {
        envStr = null;
        return "";
    }

}

Upvotes: 1

Evan Trimboli
Evan Trimboli

Reputation: 30082

The method signatures don't match:

public abstract bool Parse(string input, out Envelope envelope);
public override Envelope Parse(string input)

Also, you shouldn't really prefix a class name with I if it's not an interface.

Upvotes: 1

Related Questions