user1462199
user1462199

Reputation:

Access Protected Members in a Subclass

Im a little stuck and after some searching i turn to you:

class StatusResponse
{
    protected int _statusCode { get; set; }
    protected string _statusMessage { get; set; }

    public StatusResponse(string Response)
    {
        if (!String.IsNullOrEmpty(Response))
        {
            this._statusCode = int.Parse((Response.Split(' '))[0].Trim());
            this._statusMessage = Response;
        }
    }
}

class GroupStatusResponse : StatusResponse
{
    public int Count { get; private set; }
    public int FirstArticle { get; private set; }
    public int LastArticle { get; private set; }
    public string Newsgroup { get; private set; }

    public GroupStatusResponse(string Response) : base(Response)
    {
            string[] splitResponse = Response.Split(' ');
            this.Count = int.Parse(splitResponse[1].Trim());
            this.FirstArticle = int.Parse(splitResponse[2].Trim());
            this.LastArticle = int.Parse(splitResponse[3].Trim());
            this.Newsgroup = splitResponse[4].Trim();
    }

Why cant i do this:

GroupStatusResponse resp = new GroupStatusResponse("211 1234 3000234 3002322 misc.test");
Console.Writeline(resp._statusCode);

Upvotes: 2

Views: 100

Answers (2)

Maku
Maku

Reputation: 1558

It's because _statusCode is protected. This means the field is inaccessible outside of the class.

Upvotes: 0

SWeko
SWeko

Reputation: 30912

using

Console.Writeline(resp._statusCode);

from outside the derived class is public, and not protected use.

However, you could add something like:

class GroupStatusResponse : StatusResponse
{
   public int GetStatusCode()
   {
      return _statusCode;
   }
}

which is completely valid use.

Moreover, if the scenario is that _statusCode should be allowed to read by anyone, but only the base class should be able to set it, you could change its definition to:

public string _statusMessage { get; private set; }

Upvotes: 2

Related Questions