如何在派生类中使用基类的受保护函数?
public class A
{
protected void Test()
{
// some code....
}
}
public class B : A
{
public void Test2()
{
A obj = new A();
obj.Test(); // error thrown;
}
}
当我尝试使用基类的Test函数时。这是投掷错误..
答案 0 :(得分:2)
您可以直接调用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
}
}
答案 1 :(得分:2)
我认为可以通过基类中的受保护静态方法来完成,而不会丢失封装。
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
答案 2 :(得分:1)
因为' A' Test()
受到保护,这意味着B
将其视为private
。
B
继承自A
,而A
包含受保护的Test
这一事实并不意味着其他对象可以访问{{1}即使他们从该类继承。
虽然:
由于Test
继承自B
,A
包含私有方法B
。因此,Test()
可以访问它自己的B
函数,但这并不意味着Test
可以访问B
的{{1}}函数。
所以:
A
答案 3 :(得分:1)
测试在对象A的实例中受到保护。
致电
this.Test()
无需在B中创建对象A.
答案 4 :(得分:1)
似乎你误解了“受保护”这个词。看一下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();
}
}
答案 5 :(得分:0)
受保护的方法仅适用于派生类型。换句话说,当您创建A的实例时,您正试图公开访问该方法。