zoukankan      html  css  js  c++  java
  • C# 类型实例化的语法糖--unity下诡异结果

    类型实例化语法糖就是如下的用法:

    public class Abc
    {
        public int ID { get; set; }
     
        public string Name { get; set; }
     
        public string Url { get; set; }
    }

    我们没有为上面的类声明构造函数,但是我们可以像下面的形式来实例化它

    public static void Main(string[] args) {
            var abc = new Abc{
                ID=1,
                Name="Ice",
                Url="http://www.cnblogs.com/"
            };
        }

    关于语法糖的其他用法,可以google或者百度之。

    语法糖的这用用法,只是编译器提供的便捷方法而已,其等价于:

    var abc = new Abc();
    abc.ID = 1;
    abc.Name = "Ice";
    abc.Url = "http://www.cnblogs.com";

    -----------------------------------------------心怀鬼胎的分界线--------------------------------------------------------------------------------

    分界线前面,简单介绍了下实例化语法糖的用法。而,下面我将提到的是,在代码过程中遇到的诡异事件。

    我写了这样的代码:

    class A
    {
        public class A1
        {
            public int id = 1;
            public bool isActive = true;
        }
        public int index;
    }
    
    
    
    A.A1 a1 = new A.A1(){
        id = 2,
        isActive = false    
    };

    然后打印id,和isActive的值,发现了诡异的事情,于是写了几个测试用例,结果如下:

    实验结果如下:
    a1.id ===>2
    a1.isActive===> true
    
    实验用例:
    (1) isActive 不设置默认值,
        分三种情况:
            a、在new时不设置值,输出值为false。
            b、在new时设置为false,输出值为false。
            c、在new时设置为true,输出值为true。
    (2) isActive 设置默认值为false,
        分三种情况:
            a、在new时不设置值,输出值为false。
            b、在new时设置为false,输出值为false。
            c、在new时设置为true,输出值为true。
    (3) isActive 设置默认值为true,
        分三种情况:
            a、在new时不设置值,输出值为true
            b、在new时设置为false,输出值为true
            c、在new时设置为true,输出值为true。

    标红的为诡异的事情,因为按照语法糖的解释来说,输出值应该为false的。

    这一点,求解释吧。对了,我用的环境是untiy4.6.5。用的框架是unity 3.5 .net full base class libraries .

    有人说,干嘛要这么较真呢,不用语法糖就是了。我想说,对于一个很完善的项目,到处都是语法糖用法,你也不可能把同事的代码去给他改了吧

    -----------------------后续-------------------------------------

    终于还是忍不住,在C# ConsoleApplication下试了试,结果发现,木有任何诡异的问题。不管是 .Net4.0Client Profile 还是.Net3.5 Client Profile.

    但是同样的代码,在unity工程下的C#代码内就存在问题。不论是用的 Unity3.5 .net Subnet Base Class Libraries 还是unity 3.5 .net full base Class Libraries。

    使用类型语法糖的同学们,自己注意下吧。

  • 相关阅读:
    elasticsearch的服务器响应异常及解决策略(转)
    年薪30W的软件测试“老司机”工作经验
    Selenide 阶段性总结介绍(UI自动化测试工具)
    自动化测试的类型以及对测试自动化的几个误区
    使用Jmeter进行http接口性能测试
    如何修炼为测试架构师
    关于接口测试的一点小小的感悟
    详细讲解 A/B 测试关键步骤,快来检查下还有哪些疏漏的知识点
    JMeter测试WebSocket的经验总结
    Android 自动化测试及性能数据采集的 Python 脚本
  • 原文地址:https://www.cnblogs.com/slysky/p/5378038.html
Copyright © 2011-2022 走看看