我想更詳細地了解/了解機制為什么會引發堆疊溢位錯誤?(.Net Fiddle 鏈接)
(與DisplayType在Interface和抽象類中都存在這一事實有關,重命名后者使其作業。我想了解導致此溢位的執行路徑是什么)。
using System;
using System.IO;
public class Program
{
public static void Main()
{
Console.WriteLine("--------BEGIN--------");
FIVan van = new FIVan();
van.DisplayType();
Console.WriteLine("---------END---------");
}
}
public interface IVan
{
public Type TheType {get;}
public void DisplayType() => Console.WriteLine("Generic Type associated with this IVan<T> is : " TheType.ToString());
}
public abstract class AVan<T> : IVan
where T : class
{
public Type TheType { get => typeof(T);}
// NOTE : renaming DisplayType to something else (like Display()) doesn't Stack Overflow, it works.
public void DisplayType() => ((IVan)this).DisplayType();
}
public class FIVan : AVan<FileInfo>
{
}
編輯: 實際上我并沒有完全意識到默認介面實作是如何作業的。我添加此編輯以將您指向這篇我發現有趣的文章。
uj5u.com熱心網友回復:
AVan<T>.DisplayType()覆寫由 指定的默認介面實作IVan.DisplayType()。所以它只是無限期地遞回呼叫自己。
如果AVan<T>.DisplayType重命名,則改為呼叫默認介面實作,因此不會導致堆疊溢位。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/425691.html
