在C#中,受保护的成员可以被其所属类的实例以及从该类派生的子类实例访问。如果一个成员被声明为受保护的,那么它可以被类的外部代码访问,但是只能通过一个基类的变量来访问。这是因为受保护的成员提供了一种限制访问的方式,只允许派生类和友元类访问,同时限制了基类的实例访问。
例如,如果一个基类有一个受保护的成员,那么派生类可以通过基类的实例访问该成员,但是基类的实例不能直接访问该成员。这是因为受保护的成员只能被派生类访问,而不能被基类访问。
以下是一个示例代码:
class BaseClass
{
protected int x;
}
class DerivedClass : BaseClass
{
void AccessProtectedMember()
{
BaseClass baseObj = new BaseClass();
DerivedClass derivedObj = new DerivedClass();
baseObj.x = 10; // Error: cannot access protected member through base class instance
derivedObj.x = 20; // OK: can access protected member through derived class instance
}
}
在上面的代码中,BaseClass
有一个受保护的成员x
,DerivedClass
继承自BaseClass
。在AccessProtectedMember
方法中,我们尝试通过基类的实例和派生类的实例访问x
。由于受保护的成员只能被派生类访问,因此尝试通过基类的实例访问x
会导致编译错误。而通过派生类的实例访问x
是允许的。
总之,受保护的成员可以通过基类变量访问,但是只能在派生类的实例中访问。
领取专属 10元无门槛券
手把手带您无忧上云