[英]Cannot Access Protected Function in Derived Class in C#?
如何在派生类中使用基类的保护功能?
public class A
{
protected void Test()
{
// some code....
}
}
public class B : A
{
public void Test2()
{
A obj = new A();
obj.Test(); // error thrown;
}
}
当我尝试使用基类的Test函数时。 它抛出错误。
您可以直接调用Test()
方法,而不必创建基本类型的新对象:
public class A
{
protected void Test()
{
// some code....
}
}
public class B : A
{
public void Test2()
{
Test(); // Calls the test method in the base implementation of the CURRENT B object
}
}
我认为可以通过基类中受保护的静态方法来做到这一点,而不会丢失封装。
public class A
{
protected void Test() { /* ... */ }
protected static void Test(A obj)
{
obj.Test();
}
}
public class B : A
{
public void Test2()
{
A obj = new A();
A.Test(obj);
}
}
有效地,只能从派生类及其兄弟中调用A.Test()
。
用于测试的代码段: http : //volatileread.com/utilitylibrary/snippetcompiler?id=37293
这是因为'A的Test()
受保护,这意味着B
认为它是private
。
B
继承自A
,并且A
包含受保护的Test
事实并不意味着其他对象也可以访问Test
,即使它们从该类继承。
虽然:
由于B
继承自A
,因此B
包含私有方法Test()
。 因此, B
可以访问它自己的Test
函数,但这并不意味着B
可以访问A
的Test
函数。
所以:
public class A
{
protected void Test()
{
// some code....
}
}
public class B : A
{
public void Test2()
{
this.Test(); // Will work!
}
}
测试在对象A的实例内受到保护。
刚打电话
this.Test()
无需在B内创建对象A。
似乎您误解了“受保护”一词。 看看msdn: http : //msdn.microsoft.com/en-us/library/bcd5672a (v = vs.71) .aspx
您的示例需要像这样:
public class A
{
protected void Test()
{
// some code....
}
}
public class B : A
{
public void Test2()
{
this.Test();
}
}
受保护的方法仅适用于派生类型。 换句话说,当您创建A的实例时,您尝试公开访问该方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.