我有以下代碼'this'關鍵字實際引用了什麼類型?
public class Base {
public Base() {}
public virtual void IdentifyYourself() {
Debug.Log("I am a base");
}
public void Identify() { this.IdentifyYourself(); }
}
public class Derived : Base {
public Derived() {}
public override void IdentifyYourself() {
Debug.Log("I am a derived");
}
}
我運行在不同的入口點下面的測試代碼:
Base investigateThis = new Derived();
investigateThis.Identify()
,輸出是:「我是一個派生」
所以不管在哪裏使用C#'this'關鍵字;它是否總是引用運行時類型,而不管'this'用於什麼範圍?
獎勵積分的人誰能夠「谷歌」比我更好的和明確「本」(雙關語意)行爲找到MSDN文檔。
最後,沒有人知道發生了什麼是引擎蓋下發生?它只是一個演員?
更新#1:在碼修正錯字;對於當前的答案,我想我沒有完全理解MSDN文檔中「..是當前實例」的含義。
更新#2:道歉,我不確定我是否應該提出一個單獨的問題,但進一步調查後,我再次迷茫自己;給出這個更新的代碼,爲什麼輸出都是:「我是派生的」&「這是一個基地!」。
沒有其他人回答說「這」確實是運行時類型?讓我知道如果我更新的問題仍然不清楚。
更新代碼:
public class Base {
public Base() {}
public virtual void IdentifyYourself() {
Debug.Log("I am a base");
}
//Updated the code here...
public void Identify() { this.IdentifyYourself(); AnotherTake(); }
public void AnotherTake() { WhatIsItExactly(this); }
public void WhatIsItExactly(Derived thing) {
Debug.Log("It is a derived!");
}
public void WhatIsItExactly(Base thing) {
Debug.Log("It is a base!");
}
}
public class Derived : Base {
public Derived() {}
public override void IdentifyYourself() {
Debug.Log("I am a derived");
}
}
這是一個合乎邏輯的事情:什麼'this'指的是當前對象?這不是'那個',而是'這個'。你的問題甚至不是真的關於'this',而是關於虛擬方法。 –
google'c#this'和this(雙關語意)是第一個結果https://msdn.microsoft.com/en-us/library/dk1507sz.aspx – Nkosi
您的派生類不會從目標以外的任何東西中派生出來。 – Nkosi