struct對象可能被分配在托管堆上嗎?
--會的。
比如當對struct裝箱的時候,就會被分配在托管堆上。
比如,讓一個struct實現(xiàn)一個接口。
public interface IReport{string Name { get; }}public struct Score : IReport{public string Name{get { return "80分來自struct"; }}}
再來一個類負責打印接口屬性值的類和方法。
public class Tester{public void Test(IReport report){Console.WriteLine(report.Name);}}
然后在Main方法中如下調(diào)用:
static void Main(string[] args){var tester = new Tester();tester.Test(new Score());Console.ReadKey();}
現(xiàn)在,我們想查看在這過程中,struct是否發(fā)生了裝箱。
打開"VS2012開發(fā)人員命令提示"。
導航到exe文件所在的文件夾,然后用ildasm反編譯,把IL代碼輸出到一個1.txt文件中。

我們看到,對struct對象進行了裝箱。

那么,如何避免裝箱呢?
可以在Tester類中,增加一個泛型方法。
public class Tester{public void Test(IReport report){Console.WriteLine(report.Name);}public void TestGeneric<T>(T report) where T : IReport{Console.WriteLine(report.Name);<PRe style="font-size: 10px; font-family:
新聞熱點
疑難解答