如何在派生类中使用基类的保护函数?
public class A
{
protected void Test()
{
// some code....
}
}
public class B : A
{
public void Test2()
{
A obj = new A();
obj.Test(); // error thrown;
}
}
当我尝试使用基类的测试功能时。它正在抛出错误..
如何在派生类中使用基类的保护函数?
public class A
{
protected void Test()
{
// some code....
}
}
public class B : A
{
public void Test2()
{
A obj = new A();
obj.Test(); // error thrown;
}
}
当我尝试使用基类的测试功能时。它正在抛出错误..
您可以直接调用该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'sTest()
是受保护的,这意味着,B
将其视为private
.
B
继承自A
并A
包含受保护的事实Test
并不意味着其他对象可以访问Test
,即使它们继承自该类。
虽然:
由于B
继承自A
,B
包含私有方法Test()
。所以,B
可以访问它自己的Test
函数,但这并不意味着B
可以访问A
sTest
函数。
所以:
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 的实例时,您正试图公开访问该方法。