类型实例化语法糖就是如下的用法:
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 ===>2a1.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。
使用类型语法糖的同学们,自己注意下吧。