访问子类中的受保护成员

时间:2012-12-20 08:56:53

标签: c# .net

我有点陷入困境,经过一番搜索后,我转向你:

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();
    }

为什么我不能这样做:

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

2 个答案:

答案 0 :(得分:2)

使用

Console.Writeline(resp._statusCode);

从派生类外部是公共的,而不是受保护的使用。

但是,您可以添加以下内容:

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

完全有效使用。

此外,如果情况是任何人都应允许_statusCode读取,但只有基类应该能够设置它,您可以将其定义更改为:

public string _statusMessage { get; private set; }

答案 1 :(得分:0)

这是因为_statusCode是protected。这意味着该课程在课堂外无法进入。