C#访问派生类对象的受保护字段

时间:2017-03-21 22:12:24

标签: c# inheritance protected derived-class

有两个类:

class A
{
   protected IntPtr i;
   public A(A copy)
   {
      this.i = SomeStaticClass.Copy(copy.i);
   }
   protected A(IntPtr ds)
   {
      this.i = ds;
   }
}

class B : A
{
    public B(A init)
    {
        SomeStaticClass.doSomethingWith(init.i); //Cant access this field.
    }

    public void AnotherMethod(A asd)
    {
        SomeStaticClass.doSomethingWith(init.i); //Cant access this field again.
    }
}

A类中的字段“i”可以控制非托管代码,因此它不应该公开。

而且我不想制作A的副本(wh会调用一些非托管代码来复制i字段,这需要一些时间),B的这个构造函数只是将A转换为B.

为什么B类的对象无法访问objectOfA.i字段?

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:1)

这个怎么样?

class B : A
{
    public B(A init) 
        : base(init)
    {
        SomeStaticClass.doSomethingWith(i);
    }

    public void AnotherMethod(A asd)
    {
        SomeStaticClass.doSomethingWith(i);
    }
}

B需要调用A的构造函数,然后设置受保护的成员i。然后,您可以照常访问派生类中的此受保护字段。

  

我需要访问init.i,而不是this.i

出于显而易见的原因,你无法做到。 protected成员只能在其类中派生的类实例访问:msdn.microsoft.com/en-us/library/bcd5672a.aspx

答案 1 :(得分:-1)

如果要使用A对象构造B对象,则需要先调用A构造函数然后在B对象中使用它来访问i。 在B构造函数中,调用base(A)构造函数。

然后你可以打电话:

SomeStaticClass.doSomethingWith(this.i);