标签:
类型实例化语法糖就是如下的用法:
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 3.5 .net full base Class Libraries.
但是同样的代码,在unity工程下的C#代码内就存在问题。不论是用的 Unity3.5 .net Subnet Base Class Libraries 还是unity 3.5 .net full base Class Libraries。
使用类型语法糖的同学们,自己注意下吧。
标签:
原文地址:http://www.cnblogs.com/slysky/p/5378038.html