![](/img/trans.png)
[英]How can I access members of a derived class's base class through the Immediate window in Visual Studio?
[英]How can I access the result in Derived 1 and Derived 2 and not the base class
class Baseclass
{
public void fun()
{
Console.Write("Base class" + " ");
}
}
class Derived1 : Baseclass
{
new void fun()
{
Console.Write("Derived1 class" + " ");
}
}
class Derived2 : Derived1
{
new void fun()
{
Console.Write("Derived2 class" + " ");
}
}
class Program
{
public static void Main(string[] args)
{
Derived2 d = new Derived2();
Derived1 e = new Derived1();
d.fun();
e.fun();
}
}
如何在派生1和派生2中而不是基类中访问结果?这是重载还是重写?
new
的既不是过载也不是重写。 本质上说:“当我被调用时, 对象被Derived1
为Derived1
,然后调用它”。 请注意,这是在投射对象时 ,而不是在与该对象进行交互时。
如果您将方法标记为public
,那么您的代码似乎可以正常工作。 例如:
class Derived1 : Baseclass
{
public new void fun()
{
Console.Write("Derived1 class" + " ");
}
}
class Derived2 : Derived1
{
public new void fun()
{
Console.Write("Derived2 class" + " ");
}
}
会打印
Derived2类Derived1类
但是,将您的代码更改为以下内容将揭示这种情况下new
的问题:
void Main()
{
Derived2 d = new Derived2();
Derived1 e = new Derived1();
ExecuteIt(d);
ExecuteIt(e);
}
void ExecuteIt(Baseclass obj)
{
obj.fun();
}
版画
基类基类
由于对象Baseclass
为Baseclass
,因此隐藏不会生效。 要正确实现覆盖,您需要执行以下操作:
class Baseclass
{
public virtual void fun()
// ^^^^^^^
{
Console.Write("Base class" + " ");
}
}
class Derived1 : Baseclass
{
public override void fun()
// ^^^^^^ ^^^^^^^^
{
Console.Write("Derived1 class" + " ");
}
}
class Derived2 : Derived1
{
public override void fun()
// ^^^^^^ ^^^^^^^^
{
Console.Write("Derived2 class" + " ");
}
}
与以下哪个一起运行:
void Main()
{
Derived2 d = new Derived2();
Derived1 e = new Derived1();
ExecuteIt(d);
ExecuteIt(e);
}
void ExecuteIt(Baseclass obj)
{
obj.fun();
}
正确输出
Derived2类Derived1类
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.