有两个类:
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字段?
有没有办法解决这个问题?
答案 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);