[英]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.