2013-04-05 63 views
0

当Java创建对象,我用的语法如下:虽然找过C#中的项目我碰到下面的代码来有人可以在C#中解释这种语法吗?

objectX1 = new ObjectX(some arguments); 

_createSample = new Func<SampleBase>[] 
{ 
    () => new SkeletonMappingSample(); 
} 

我需要两两件事来解释我。 首先,如何创建一个没有方括号和参数列表的对象,而是使用{}和表达式工作?

接下来,{}之间的表达意味着什么?

+0

集合初始化语法(或等效反正)存在于Java的太... – Servy 2013-04-05 13:47:48

回答

3

您找到的代码︰

_createSample = new Func<SampleBase>[] 
{ 
    () => new SkeletonMappingSample(); 
} 

只是一个创建数组,然后用值初始化它的符号。

这实际上是一样的:

_createSample = new Func<SampleBase>[1]; 
_createSample[0] =() => new SkeletonMappingSample(); 

除了在{ }版本的界限是由编译器根据你有多少元素{ }

之间增加为对象设置:

SomeClass abc = new SomeClass() 
{ 
    SomeProperty = "SomeValue", 
} 

只是一种创建对象然后设置一些属性值的方法,它实际上与以下相同:

SomeClass abc = new SomeClass(); 
abc.SomeProperty = "SomeValue"; 
1

此代码创建的Func数组:_createSample = new Func<SampleBase>[]

然后它实例化一个lambda expression() => new SkeletonMappingSample()如在它的鞋底元件,使用collection initializer(注意括号和分号是可选的):

{ 
    () => new SkeletonMappingSample(); 
} 

这个表达式在调用时会实例化一个新的SkeletonMappingSample:

var newMappingSample = _createSample[0](); 
+0

这是一个“集合初始化”不是一个对象初始化。他们是两个完全不同的东西。 – Servy 2013-04-05 13:48:25

+0

这只能说明它创建了一个func数组,然后包含了有关lambdas等的其他不必要的信息,这个问题只是关于语法如何从给定的一组项目初始化数组。 – Clint 2013-04-05 14:04:13

相关问题