国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

struct對象可能分配在托管堆上嗎

2019-11-17 02:23:19
字體:
供稿:網(wǎng)友

struct對象可能分配在托管堆上嗎

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文件中。

1

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

2

那么,如何避免裝箱呢?

可以在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:
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 天柱县| 玉龙| 靖州| 香港| 平江县| 营山县| 页游| 武乡县| 广昌县| 瑞安市| 房山区| 竹山县| 岚皋县| 上犹县| 巴马| 柳林县| 阳山县| 新竹市| 东辽县| 宁津县| 阿勒泰市| 黄梅县| 封丘县| 新丰县| 安化县| 龙岩市| 锡林郭勒盟| 萨迦县| 焦作市| 贺兰县| 监利县| 黔南| 邵东县| 桃园市| 怀集县| 桂林市| 阿拉尔市| 丹江口市| 凤阳县| 循化| 邹平县|