我有一个问题,我有一个基类和另一个派生自基类的类。我们可以在基类中访问派生类。
提前致谢
答案 0 :(得分:2)
您可以从基类代码访问派生类中的代码,但只能从实际上是派生类对象的对象中访问,并且只有在涉及的方法是虚方法时才能访问。
如果您有一个对象本身就是基类的实例,那么从该实例中您无法看到基类的派生类代码。
例如
public class Baseclass
{
public void Foo()
{
Bar();
}
public virtual void Bar()
{
print("I'm a BaseClass");
}
}
public classs Derived: BaseClass
{
public override void Bar()
{
print("I'm a Derived Class");
}
}
Main()
{
var b = new BaseClass();
x.Foo() // prints "I'm a BaseClass"
// This Foo() calls Bar() in base class
var d = new Derived();
d.Foo() // prints "I'm a Derived Class"
// in above, the code for Foo() (in BaseClass)
// is accessing Bar() in derived class
}
答案 1 :(得分:0)
不,你不能。如果您碰巧知道声明为Base类的对象实际上是派生类,您可以将其强制转换。但是在基类中,您无法访问派生类的成员。
答案 2 :(得分:0)
基类有很多方法可以访问派生类的成员(取决于编程语言),但通常它被认为是一种设计气味。
相反,您通常希望基类只能直接访问自己的成员,并允许派生类覆盖方法。