Unity热更新方案C#Like(十六)-详解支持的C#特性:其他杂项:初始值设定项,表达式主体,内联变量声明

本文详细介绍了Unity热更方案C#Like中支持的C#特性,包括初始值设定项、表达式主体和内联变量声明,并通过示例展示了这些功能在完整版中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C#Like是Unity的热更方案,使用纯C#语言写出可以热更新的代码,就像可以在所有平台使用DLL(动态链接库)文件一样.遵从KISS设计原则,让用户轻松构建或升级成Unity的热更新项目.

简介

本篇主要介绍C#Like支持的C#特性:初始值设定项,表达式主体,内联变量声明

  • C#Like免费版:无;
  • C#Like完整版:支持初始值设定项,表达式主体,内联变量声明.

C#Like免费版:

示范代码如下:

using System.Collections.Generic;  
using UnityEngine;  
  
namespace CSharpLike  
{  
    public partial class SampleCSharp : LikeBehaviour  
    {  
        /// <summary>  
        /// 测试其他杂项.  
        /// </summary>  
        void TestOther()  
        {  
            Debug.LogError("测试其他杂项: 免费版不支持 '对象初始值设定项'/'内联变量声明'/"  
            +"'构造函数和方法和属性和访问器的表达式主体'/'switch表达式及弃元_'/'集合初始值设定项' (在完整版支持)" ;  
        }  
    }  
}  

 C#Like完整版:

示范代码如下:

using System.Collections.Generic;  
using UnityEngine;  
  
namespace CSharpLike  
{  
    public partial class SampleCSharp : LikeBehaviour  
    {  
        /// <summary>  
        /// 测试其他杂项.  
        /// </summary>  
        void TestOther()  
        {  
            Debug.LogError("Test Other:");  
            // 测试使用对象初始值设定项  
            TestObjectInitializer objctInitializer = new TestObjectInitializer()//"()"可以被省略  
            {  
                a = 1,  
                b = "abcd",//你可以在尾部保留','或者移除也行  
            };  
            Debug.Log($"Test use object initializers: a={objctInitializer.a}, b={objctInitializer.b}");//输出 a=1, b=abcd  
  
            // 测试造函数和方法和属性和访问器的表达式主体  
            TestClassExpression tce = new TestClassExpression(1);  
            Debug.Log("Test expression body for constructors: " + tce._Age);//输出 1  
            Debug.Log("Test expression body for properties: " + tce.Age);//输出 1  
            Debug.Log("Test expression body for methods: " + tce.GetAge());//输出 1  
            tce.AgeEx = 2;  
            Debug.Log("Test expression body for accessors: " + tce.AgeEx);//输出 2  
  
            // 测试内联变量声明  
            Dictionary<int, int> dics = new Dictionary<int, int>  
            {  
                [1] = 2,  
                [2] = 3  
            };  
            if (dics.TryGetValue(1, out int dicValue))  
                Debug.Log("Test inline variable declaration: " + dicValue);//输出 2  
  
            // 测试switch表达式  
            int x = 1;  
            string y = ((x + 1) switch  
            {  
                0 => "is 0",  
                1 => "is 1",  
                _ => "is default",  
            });  
            /*上面的表达式等效于这个 
            string y; 
            switch (x+1) 
            { 
                case 0: 
                    y = "is 0"; 
                    break; 
                case 1: 
                    y = "is 1"; 
                    break; 
                default: 
                    y = "is default"; 
                    break; 
            });*/  
            Debug.Log("Test switch expression: " + y);//输出 is default  
            Debug.Log("Test switch expression: " + Test(1));//输出 is 1  
  
            // 测试弃元'_'  
            _ = Test(0);  
            Debug.Log("Test switch discard '_': ");  
        }  
        public string Test(int x)  
        {  
            return x switch  
            {  
                0 => "is 0",  
                1 => "is 1",  
                _ => "is default"  
            };  
        }  
        /*上面的'Test(int x)'等效于这个 
        public string Test(int x) 
        { 
            switch (x) 
            { 
                case 0: return "is 0"; 
                case 1: return "is 1"; 
                default: return "is default"; 
            }; 
        }*/  
        class TestClassExpression  
        {  
            public int _Age;  
            /// <summary>  
            /// 测试构造函数的表达式主体  
            /// </summary>  
            public TestClassExpression(int age) => _Age = age;  
            /// <summary>  
            /// 测试方法的表达式主体  
            /// </summary>  
            public int GetAge() => _Age;  
            /// <summary>  
            /// 测试属性的表达式主体  
            /// </summary>  
            public int Age => _Age;  
            /// <summary>  
            /// 测试访问器的表达式主体  
            /// </summary>  
            public int AgeEx { get => _Age; set => _Age = value; }  
        }  
        /// <summary>  
        /// 测试使用对象初始值设定项  
        /// </summary>  
        public class TestObjectInitializer  
        {  
            public int a;  
            public string b;  
        }  
    }  
}  

 本系列文章导读:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C#Like

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值