• 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。

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

  • 相关阅读:
    P2P理财友情提示
    P2P理财友情提示
    如何在Chrome development tool里查看C4C前台发送的请求细节
    CRM和ERP的Sales Organization的映射关系
    如何从ERP将Material的Batch信息下载到CRM并存储在settype COMM_PR_BATCH里
    CRM中间件里的发布-订阅者模式
    CRM订单状态的Open, In process和Completed这些条目是从哪里来的
    如何证明CRM WebClient UI上的应用是有状态(Stateful)的
    如何使用代码获得一个function module的Where Used List
    观察者模式在One Order回调函数中的应用
  • 原文地址:https://www.cnblogs.com/slysky/p/5378038.html
Copyright © 2020-2023  润新知